#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; #define PAIRS(x) ((ll)(x) * ((ll)(x)-1) / 2) int main() { ios_base::sync_with_stdio(0); cin.tie(0); ll ans = 0; string s; cin >> s; s += '.'; int cnt[3] = {0, 0, 0}; int a = 0, b = 0, c = 0; map<int, int> ab, bc, ca; map<pii, int> abc; for (char l : s) { l == 'a' ? a++ : (ans += PAIRS(a + 1), a = 0); l == 'b' ? b++ : (ans += PAIRS(b + 1), b = 0); l == 'c' ? c++ : (ans += PAIRS(c + 1), c = 0); ab[cnt[0] - cnt[1]]++; bc[cnt[1] - cnt[2]]++; ca[cnt[2] - cnt[0]]++; abc[{cnt[0] - cnt[1], cnt[1] - cnt[2]}]++; cerr << cnt[0] << ' ' << cnt[1] << ' ' << cnt[2] << '\n'; if (l != 'a' && l != 'b') { for (auto x : ab) ans += PAIRS(x.second); ab.clear(); } if (l != 'b' && l != 'c') { for (auto x : bc) ans += PAIRS(x.second); bc.clear(); } if (l != 'c' && l != 'a') { for (auto x : ca) ans += PAIRS(x.second); ca.clear(); } if (l != 'a' && l != 'b' && l != 'c') { for (auto x : abc) ans += PAIRS(x.second); abc.clear(); } if (l == 'a' || l == 'b' || l == 'c') cnt[l - 'a']++; } cout << ans << '\n'; }
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 59 60 61 | #include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; #define PAIRS(x) ((ll)(x) * ((ll)(x)-1) / 2) int main() { ios_base::sync_with_stdio(0); cin.tie(0); ll ans = 0; string s; cin >> s; s += '.'; int cnt[3] = {0, 0, 0}; int a = 0, b = 0, c = 0; map<int, int> ab, bc, ca; map<pii, int> abc; for (char l : s) { l == 'a' ? a++ : (ans += PAIRS(a + 1), a = 0); l == 'b' ? b++ : (ans += PAIRS(b + 1), b = 0); l == 'c' ? c++ : (ans += PAIRS(c + 1), c = 0); ab[cnt[0] - cnt[1]]++; bc[cnt[1] - cnt[2]]++; ca[cnt[2] - cnt[0]]++; abc[{cnt[0] - cnt[1], cnt[1] - cnt[2]}]++; cerr << cnt[0] << ' ' << cnt[1] << ' ' << cnt[2] << '\n'; if (l != 'a' && l != 'b') { for (auto x : ab) ans += PAIRS(x.second); ab.clear(); } if (l != 'b' && l != 'c') { for (auto x : bc) ans += PAIRS(x.second); bc.clear(); } if (l != 'c' && l != 'a') { for (auto x : ca) ans += PAIRS(x.second); ca.clear(); } if (l != 'a' && l != 'b' && l != 'c') { for (auto x : abc) ans += PAIRS(x.second); abc.clear(); } if (l == 'a' || l == 'b' || l == 'c') cnt[l - 'a']++; } cout << ans << '\n'; } |