学习第三篇题解,不要在最后用等差数列求和公式写,写在第一个统计二进制循环里面
wa task:
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+100,M=7e7;
int sub[N],n,ton[M];
string s;
long long ans=0;
int main(){
cin >> n;
cin >> s;
ton[0]++;
for(int i=0;i<n;i++){
if(i>0) sub[i]=sub[i-1];
if(sub[i]>>(s[i]-'a')&1) sub[i]-=1<<(s[i]-'a');
else sub[i]+=1<<(s[i]-'a');
ton[sub[i]]++;
}
for(int i=0;i<M;i++){
ans+=(ton[i]*(ton[i]-1))/2;
}
cout << ans;
return 0;
}
ac task
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+100,M=7e7;
int sub[N],n,ton[M];
string s;
long long ans=0;
int main(){
cin >> n;
cin >> s;
ton[0]++;
for(int i=0;i<n;i++){
if(i>0) sub[i]=sub[i-1];
if(sub[i]>>(s[i]-'a')&1) sub[i]-=1<<(s[i]-'a');
else sub[i]+=1<<(s[i]-'a');
ans+=ton[sub[i]];
ton[sub[i]]++;
}
cout << ans;
return 0;
}
有用记得感谢我awa