#include <iostream>
#include <map>
using namespace std;
map<pair<int, int>, int> abc_prefixes;
map<int, int> ab_prefixes;
map<int, int> ac_prefixes;
map<int, int> bc_prefixes;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
string input;
cin >> input;
abc_prefixes[make_pair(0, 0)] = 1;
ab_prefixes[0] = 1;
ac_prefixes[0] = 1;
bc_prefixes[0] = 1;
long long result = 0;
int a_counter = 0;
int b_counter = 0;
int c_counter = 0;
int same_letter_counter = 0;
char prev_letter = 0;
for (char letter : input) {
if (letter == prev_letter) {
same_letter_counter++;
}
else {
same_letter_counter = 1;
prev_letter = letter;
}
result += same_letter_counter;
if (letter == 'a') {
a_counter++;
bc_prefixes.clear();
}
else if (letter == 'b') {
b_counter++;
ac_prefixes.clear();
}
else {
c_counter++;
ab_prefixes.clear();
}
int ab_diff = a_counter - b_counter;
int bc_diff = b_counter - c_counter;
int ac_diff = a_counter - c_counter;
result += abc_prefixes[make_pair(ab_diff, bc_diff)];
result += ab_prefixes[ab_diff];
result += ac_prefixes[ac_diff];
result += bc_prefixes[bc_diff];
abc_prefixes[make_pair(ab_diff, bc_diff)] += 1;
ab_prefixes[ab_diff] += 1;
ac_prefixes[ac_diff] += 1;
bc_prefixes[bc_diff] += 1;
}
cout << result << '\n';
return 0;
}
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 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | #include <iostream> #include <map> using namespace std; map<pair<int, int>, int> abc_prefixes; map<int, int> ab_prefixes; map<int, int> ac_prefixes; map<int, int> bc_prefixes; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); string input; cin >> input; abc_prefixes[make_pair(0, 0)] = 1; ab_prefixes[0] = 1; ac_prefixes[0] = 1; bc_prefixes[0] = 1; long long result = 0; int a_counter = 0; int b_counter = 0; int c_counter = 0; int same_letter_counter = 0; char prev_letter = 0; for (char letter : input) { if (letter == prev_letter) { same_letter_counter++; } else { same_letter_counter = 1; prev_letter = letter; } result += same_letter_counter; if (letter == 'a') { a_counter++; bc_prefixes.clear(); } else if (letter == 'b') { b_counter++; ac_prefixes.clear(); } else { c_counter++; ab_prefixes.clear(); } int ab_diff = a_counter - b_counter; int bc_diff = b_counter - c_counter; int ac_diff = a_counter - c_counter; result += abc_prefixes[make_pair(ab_diff, bc_diff)]; result += ab_prefixes[ab_diff]; result += ac_prefixes[ac_diff]; result += bc_prefixes[bc_diff]; abc_prefixes[make_pair(ab_diff, bc_diff)] += 1; ab_prefixes[ab_diff] += 1; ac_prefixes[ac_diff] += 1; bc_prefixes[bc_diff] += 1; } cout << result << '\n'; return 0; } |
English