#include<iostream> #include<vector> #include<algorithm> #include<cmath> #include<map> #define ll long long using namespace std; ll count(string s){ map<string,ll>m; ll i = 1; ll maks = (1<<s.length())-1; while(i<=maks){ ll x = i; string t; int id = 0; while(x>0){ if(x%2==1){ t+=s[id]; } x/=2; id++; } if(m.find(t)!=m.end()){ m[t] = m[t]+1; } else{ m[t]=1; } i++; } ll cnt=0; for (auto x : m){ if(x.second>=2){ cnt = (cnt+1)%998244353; } } return cnt; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); int n,q; int p; char c; cin>>n>>q; string s; cin>>s; cout<<count(s)<<"\n"; for(int i = 0;i<q;++i){ cin>>p>>c; s[p-1]=c; cout<<count(s)<<"\n"; } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | #include<iostream> #include<vector> #include<algorithm> #include<cmath> #include<map> #define ll long long using namespace std; ll count(string s){ map<string,ll>m; ll i = 1; ll maks = (1<<s.length())-1; while(i<=maks){ ll x = i; string t; int id = 0; while(x>0){ if(x%2==1){ t+=s[id]; } x/=2; id++; } if(m.find(t)!=m.end()){ m[t] = m[t]+1; } else{ m[t]=1; } i++; } ll cnt=0; for (auto x : m){ if(x.second>=2){ cnt = (cnt+1)%998244353; } } return cnt; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL);cout.tie(NULL); int n,q; int p; char c; cin>>n>>q; string s; cin>>s; cout<<count(s)<<"\n"; for(int i = 0;i<q;++i){ cin>>p>>c; s[p-1]=c; cout<<count(s)<<"\n"; } return 0; } |