很思维的题, b 的 1 个数和 c 的 1 个数相差为偶数时, 必定有偶数个不同
反之必定有奇数个不同
- #include <iostream>
- #include <cstdlib>
- #include <cstdio>
- #include <cstring>
- #include <cctype>
- #include <algorithm>
- #include <cmath>
- using namespace std;
- typedef long long ll;
- const int MAXN=1000005;
- int n,m;
- char a[MAXN],b[MAXN];
- int sa[MAXN],sb[MAXN];
- int main()
- {
- #ifndef ONLINE_JUDGE
- //freopen("code.in","r",stdin);
- //freopen("code.out","w",stdout);
- #endif
- scanf("%s%s",a+1,b+1);
- n=strlen(a+1);m=strlen(b+1);
- for(int i=1;i<=n;i++)sa[i]=(a[i]-'0')^sa[i-1];
- for(int i=1;i<=m;i++)sb[i]=(b[i]-'0')^sb[i-1];
- int ans=0;
- for(int i=m;i<=n;i++)
- if(!(sb[m]^sa[i]^sa[i-m]))++ans;
- cout<<ans<<endl;
- return 0;
- }
来源: http://www.bubuko.com/infodetail-3107402.html