#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll M = 998244353;
void solve(string &s) {
int n = s.size();
vector<ll> dp1 (n, 0);
vector<ll> pop1(6, 0);
dp1[0] = 1;
for (int i = 1; i < n; i++) {
dp1[i] = (2*dp1[i-1]-(pop1[s[i]-'a'])+M*M)%M;
pop1[s[i]-'a'] = dp1[i-1];
}
vector<ll> dp2 (n, 0);
vector<ll> pop2(6, 0);
dp2[0] = 1;
for (int i = 1; i < n; i++) {
dp2[i] = (2*dp2[i-1]-2*(pop2[s[i]-'a'])+M*M)%M;
pop2[s[i]-'a'] = dp2[i-1];
}
cout << (dp1[n-1]-dp2[n-1]+M)%M << '\n';
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n, q;
cin >> n >> q;
string s;
cin >> s;
s = '_'+s;
solve(s);
for (int i = 0; i < q; i++) {
int x;
char c;
cin >> x >> c;
s[x] =c;
solve(s);
}
}
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 | #include <bits/stdc++.h> using namespace std; #define ll long long ll M = 998244353; void solve(string &s) { int n = s.size(); vector<ll> dp1 (n, 0); vector<ll> pop1(6, 0); dp1[0] = 1; for (int i = 1; i < n; i++) { dp1[i] = (2*dp1[i-1]-(pop1[s[i]-'a'])+M*M)%M; pop1[s[i]-'a'] = dp1[i-1]; } vector<ll> dp2 (n, 0); vector<ll> pop2(6, 0); dp2[0] = 1; for (int i = 1; i < n; i++) { dp2[i] = (2*dp2[i-1]-2*(pop2[s[i]-'a'])+M*M)%M; pop2[s[i]-'a'] = dp2[i-1]; } cout << (dp1[n-1]-dp2[n-1]+M)%M << '\n'; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n, q; cin >> n >> q; string s; cin >> s; s = '_'+s; solve(s); for (int i = 0; i < q; i++) { int x; char c; cin >> x >> c; s[x] =c; solve(s); } } |
English