#include <bits/stdc++.h> using namespace std; const int N = 3e5 + 5; int n; char S[N]; map<pair<int, int>, int> kub; map<pair<int, int>, int> kub_a, kub_b, kub_c; int main() { scanf("%s", &S); int n = strlen(S); kub[make_pair(0, 0)] = 1; kub_a[make_pair(0, 0)] = 1; kub_b[make_pair(0, 0)] = 1; kub_c[make_pair(0, 0)] = 1; int d1 = 0, d2 = 0, d3 = 0; long long res = 0; for (int i = 0; i < n; i++) { if (S[i] == 'a') { d1++; } if (S[i] == 'b') { d2++; } if (S[i] == 'c') { d3++; } res += kub[make_pair(d1 - d2, d1 - d3)]; kub[make_pair(d1 - d2, d1 - d3)]++; res += kub_a[make_pair(d1, d2 - d3)]; kub_a[make_pair(d1, d2 - d3)]++; res += kub_b[make_pair(d2, d1 - d3)]; kub_b[make_pair(d2, d1 - d3)]++; res += kub_c[make_pair(d3, d1 - d2)]; kub_c[make_pair(d3, d1 - d2)]++; } res++; int last = 0; for (int i = 1; i < n; i++) { if (S[i] != S[i - 1]) { last = i; } res += (i - last + 1); } printf("%lld\n", res); }
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 | #include <bits/stdc++.h> using namespace std; const int N = 3e5 + 5; int n; char S[N]; map<pair<int, int>, int> kub; map<pair<int, int>, int> kub_a, kub_b, kub_c; int main() { scanf("%s", &S); int n = strlen(S); kub[make_pair(0, 0)] = 1; kub_a[make_pair(0, 0)] = 1; kub_b[make_pair(0, 0)] = 1; kub_c[make_pair(0, 0)] = 1; int d1 = 0, d2 = 0, d3 = 0; long long res = 0; for (int i = 0; i < n; i++) { if (S[i] == 'a') { d1++; } if (S[i] == 'b') { d2++; } if (S[i] == 'c') { d3++; } res += kub[make_pair(d1 - d2, d1 - d3)]; kub[make_pair(d1 - d2, d1 - d3)]++; res += kub_a[make_pair(d1, d2 - d3)]; kub_a[make_pair(d1, d2 - d3)]++; res += kub_b[make_pair(d2, d1 - d3)]; kub_b[make_pair(d2, d1 - d3)]++; res += kub_c[make_pair(d3, d1 - d2)]; kub_c[make_pair(d3, d1 - d2)]++; } res++; int last = 0; for (int i = 1; i < n; i++) { if (S[i] != S[i - 1]) { last = i; } res += (i - last + 1); } printf("%lld\n", res); } |