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
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main() {
    string s;
    cin >> s;
    int n = s.size();
    vector<int> as(n+1, 0), bs(n+1, 0), cs(n+1, 0);
    for (int i = 1; i <= n; ++i) {
        as[i] = as[i - 1];
        bs[i] = bs[i - 1];
        cs[i] = cs[i - 1];
        switch (s[i-1]) {
            case 'a':
                as[i] += 1;
                break;
            case 'b':
                bs[i] += 1;
                break;
            case 'c':
                cs[i] += 1;
        }
    }
    int balanced = 0;
    for (int i = 0; i < n; ++i) {
        for (int j = i + 1; j <= n; ++j) {
            int a_diff = as[j] - as[i];
            int b_diff = bs[j] - bs[i];
            int c_diff = cs[j] - cs[i];
            if (a_diff == b_diff && b_diff == c_diff || a_diff == b_diff && c_diff == 0 ||
                a_diff == c_diff && b_diff == 0 || b_diff == c_diff && a_diff == 0 ||
                a_diff == 0 && b_diff == 0 || b_diff == 0 && c_diff == 0 || a_diff == 0 && c_diff == 0) {
                balanced++;
            }
        }
    }
    cout << balanced << '\n';
    return 0;
}