Problem A: 字符串“水”题(二进制存储)

来源:互联网 发布:学北京话软件 编辑:程序博客网 时间:2024/06/10 18:07

给出一个字符串,求有多少个连续字串中所有的字母都出现了偶数次。(长度是1e6级的,别想爆O(∩_∩)O~)


思路:利用异或运算的特点,从前往后扫描每次更新当前的二进制数组,如果更新后的二进制数组之前出现过,那么次数一定在map中,奇数次和奇数次可以抵消,偶数次直接(不知道怎么说),每次求和就可以了。


#include <bits/stdc++.h>using namespace std;const int maxn = 1000000;typedef long long ll;char s[maxn];map<int,int> Map;int main(){    int n;    cin >> n;    while(n--)    {        Map.clear();        scanf("%s",s);//        cout << "s:" << s<< endl;        Map[0]=1;        ll k=0;        ll ans = 0;        int len = strlen(s);        for(int i=0;i<len;i++)        {            k ^= 1<<(s[i]-'a');            ans+= Map[k];            Map[k]++;        }        cout << ans <<endl;    }    return 0;}


0 0
原创粉丝点击