#include <bits/stdc++.h>
using namespace std;
void solve_case(string &s) {
int n = s.size();
int N = (1 << n);
unordered_map<long long, int> cnt;
for (int mask = 0; mask < N; ++mask) {
long long curr = 0;
for (int bit = 0; bit < n; ++bit) {
if ((1 << bit) & mask) {
curr *= 7;
curr += s[bit] - 'a' + 1;
}
}
++cnt[curr];
}
int ans = 0;
for (auto p : cnt) {
if (p.second >= 2) ++ans;
}
cout << ans << "\n";
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int n, q; cin >> n >> q;
string s; cin >> s;
solve_case(s);
for (int i = 0; i < q; ++i) {
int pos; cin >> pos;
char c; cin >> c;
s[pos - 1] = c;
solve_case(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 | #include <bits/stdc++.h> using namespace std; void solve_case(string &s) { int n = s.size(); int N = (1 << n); unordered_map<long long, int> cnt; for (int mask = 0; mask < N; ++mask) { long long curr = 0; for (int bit = 0; bit < n; ++bit) { if ((1 << bit) & mask) { curr *= 7; curr += s[bit] - 'a' + 1; } } ++cnt[curr]; } int ans = 0; for (auto p : cnt) { if (p.second >= 2) ++ans; } cout << ans << "\n"; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, q; cin >> n >> q; string s; cin >> s; solve_case(s); for (int i = 0; i < q; ++i) { int pos; cin >> pos; char c; cin >> c; s[pos - 1] = c; solve_case(s); } } |
English