vp的 觉得我的D很聪明所以来写一下(乐
D - Three Days Ago
题意就是 求所有字符出现次数均为偶数的字串数量
太笨了所以想了很久
我把 存在奇数个1 当作第2位是 2 那么 当经过了两次1 2^2 这个2 就变成了0
2 就是第二位 就是4 ...以此类推
所以我遍历一遍字符串 求出当前的异或 并记录到map里面
为了让整串为0的可以被算到 mp[0]初始值为1
例如 20230322
读入第1个的时候 mp[4]=1;
读入第2个的时候 mp[5]=1;
读入第6个的时候 mp[0]=2; 此时为2 ans+1;
读入第7个的时候 mp[4]=2;ans+1;
读入第8个的时候 mp[0]=3; 说明前面有2种匹配方法 ans+2
这样就得出答案了
#include<bits/stdc++.h> #define close std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0) using namespace std; typedef long long ll; const ll MAXN = 5e5+7; const ll mod =1e9+7; const ll inf =0x3f3f3f3f; const ll INF =0x3f3f3f3f3f3f3f3f; #define int long long int dp[2][1024],p[20]; int pre[1024]; int lowbit(int x){ return x&-x; } int gcd(int x,int y){int k=0; if(x<y){k=x;x=y;y=k;}while(x%y!=0){k=x%y;x=y;y=k;}return y;} ll _power(ll a,int b){ll ans=1,res=a;while(b){if(b&1) ans=ans*res%mod;res=res*res%mod;b>>=1;}return ans%mod;} void solve(){ string s;cin>>s; int pp=1,bz=0; for(int i=0;i<=9;i++){ p[i]=pp; pp*=2; } int n=s.length(); int ans=0; pre[0]++; for(int i=0;i<n;i++){ int m=s[i]-'0'; bz=bz^p[m]; if(bz==0||pre[bz]!=0) ans+=pre[bz]; pre[bz]++; } cout<<ans; } signed main(){ solve(); }View Code
虽然大家应该都是这样写的但我还是要发一下
标签:AtCoder,const,Beginner,Contest,int,ll,long,mp,读入 From: https://www.cnblogs.com/xishuiw/p/17300581.html