#include <cstdio> #include <map> #include <string> using namespace std; #define FOR(i,a,b) for(int i=(a);i<(b);++i) #define REP(i,n) FOR(i,0,n) #define PB push_back #define INT(x) int x; scanf("%d", &x) #define STR(n,x) char x[n]; scanf("%s", x) const int mod = 998244353; int n; char a[50002]; map<string, int> s; string x; int go(int i = 0) { if (i == n) return ++s[x] == 2; if (!i) s.clear(); int r = go(i + 1); x.PB(a[i]); r = (r + go(i + 1)) % mod; x.pop_back(); return r; } int main() { INT(n1); n = n1; INT(q); scanf("\n"); fgets(a, 50002, stdin); printf("%d\n", go()); REP(qq,q) { INT(p); STR(2,z); a[p - 1] = z[0]; printf("%d\n", go()); } }
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 | #include <cstdio> #include <map> #include <string> using namespace std; #define FOR(i,a,b) for(int i=(a);i<(b);++i) #define REP(i,n) FOR(i,0,n) #define PB push_back #define INT(x) int x; scanf("%d", &x) #define STR(n,x) char x[n]; scanf("%s", x) const int mod = 998244353; int n; char a[50002]; map<string, int> s; string x; int go(int i = 0) { if (i == n) return ++s[x] == 2; if (!i) s.clear(); int r = go(i + 1); x.PB(a[i]); r = (r + go(i + 1)) % mod; x.pop_back(); return r; } int main() { INT(n1); n = n1; INT(q); scanf("\n"); fgets(a, 50002, stdin); printf("%d\n", go()); REP(qq,q) { INT(p); STR(2,z); a[p - 1] = z[0]; printf("%d\n", go()); } } |