没开long long赛后半分钟过题,笑死
怎么有人都大二了还会忘记开long long的!
D - Three Days Ago (atcoder.jp)
题意:
![](https://img-blog.csdnimg.cn/img_convert/ab57611900e1ff9768271bbd7be37bed.png)
思路:
考虑状压处理
开一个桶,记录前缀每一个数的出现次数的奇偶性
当出现次数是偶数时,就是0,否则就是1
然后满足条件的区间就用异或前缀和处理就好了,算一算组合数
特殊情况就是全是0的时候,这时候1~i也算,需要额外+1
这道题本来是能过的!真可惜
Code:
#include <bits/stdc++.h>
using namespace std;
#define int long long
using i64 = long long;
const int mxn=5e5+10;
const int mxe=1e8+10;
const int mod=1e9+7;
map<int,int> mp;
int n,cur=0;
string s;
void print(int x){
for(int j=9;j>=0;j--){
if((x>>j)&1) cout<<1;
else cout<<0;
}
cout<<'\n';
}
void solve(){
cin>>s;
n=s.size();
s=" "+s;
int ans=0;
for(int i=1;i<=n;i++){
int j=s[i]-'0';
cur^=(1ll<<j);
//print(cur);
if(cur==0) ans+=mp[cur]+1ll;
else ans+=mp[cur];
mp[cur]++;
}
cout<<ans<<'\n';
}
signed main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
int __=1;//cin>>__;
while(__--)solve();return 0;
}