题意:
给定两个串a,b
求a中所以子串和b匹配数位偶的情况个数
解析:
这题只需要判断是否为偶就可以,不需要求出多少个匹配
用异或前缀和,可以直接求出最前面一段
然后ans^(a[i-len_b])可以消掉最前面呢个,再^a[i],即又加入一个元素,完成移动操作
ans^a[i-len_b]^a[i],即完成一次移动,判断ans是否为偶就可以了,
#include<bits/stdc++.h>
#define MAXN 1500005
using namespace std;
char aa[MAXN],bb[MAXN];
int main()
{
scanf("%s%s",aa+1,bb+1);
int len_a=strlen(aa+1);
int len_b=strlen(bb+1);
int ans=0,sum=0;
for(int i=1;i<=len_b;i++)
ans=ans^(aa[i]-'0')^(bb[i]-'0');
if(ans%2==0)
sum++;
for(int i=len_b+1;i<=len_a;i++)
{
ans=ans^(aa[i-len_b]-'0')^(aa[i]-'0');
if(ans%2==0)
sum++;
}
printf("%d\n",sum);
return 0;
}