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
#include <cstdio>
#include <cstring>


const int max_n = 300000;
char w[max_n+1];
int a[max_n+1];
int b[max_n+1];
int c[max_n+1];


int main() {
    scanf("%s", w);
    int n = strlen(w);
    a[0] = b[0] = c[0] = 0;
    for(int i=0;i<n;i++) {
        a[i+1] = a[i]+int(w[i] == 'a');
        b[i+1] = b[i]+int(w[i] == 'b');
        c[i+1] = c[i]+int(w[i] == 'c');
    }
    long long int result=0;
    for(int i=1;i<=n;i++)
        for(int j=i;j<=n;j++) {
            int n_a = a[j]-a[i-1];
            int n_b = b[j]-b[i-1];
            int n_c = c[j]-c[i-1];
            if( (n_a==n_b || n_a*n_b==0) &&
                (n_a==n_c || n_a*n_c==0) &&
                (n_b==n_c || n_b*n_c==0) ) {
                result++;
                // char sub_buff[100];
                // memcpy(sub_buff, &w[i-1], j-i+1);
                // sub_buff[j-i+1] = '\0';
                // printf("%s\n", sub_buff);
            }
        }

    printf("%lld\n", result);

    return 0;
}