1 条题解

  • 0
    @ 2022-8-26 21:02:58
    /*****************************************
    Note:
    ******************************************/
    #include <queue>
    #include <math.h>
    #include <stack>
    #include <stdio.h>
    #include <iostream>
    #include <vector>
    #include <iomanip>
    #include <string.h>
    #include <unordered_map>
    #include <algorithm>
    using namespace std;
    const int N = 1e6 + 10;
    const int INF = 0x3f3f3f3f;
    
    using namespace std;
    typedef long long ll;
    
    const int maxn = 3 * 1e5 + 5;
    
    char str[maxn];
    unordered_map<ll, int> um;
    int main() {
        int n;
        scanf("%d%s", &n, str + 1);
    
        ll s = 0, ans = 0, a = 0;
        um[0] = 1;
    
        for(int i = 1; i <= n; i++) {
            if(islower(str[i])) 
            {
                a = str[i] - 'a';
            } 
            else 
            {
                a = str[i] - 'A' + 26;
            }
            s ^=   1LL << a;
            for(int j = 0; j < 52; j++) 
            {
                if(um.count(s ^ (1LL << j))) 
                {
                    ans += um[s ^ (1LL << j)];
                }
            }
            if(um.count(s)) 
            {
                ans += um[s];
            }
            um[s]++;
        }
        printf("%lld\n", ans);
        return 0;
    }
    
    • 1

    信息

    ID
    2803
    时间
    5000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    55
    已通过
    1
    上传者