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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <bits/stdc++.h>
using namespace std;
const int mx=3e5+5;
string s;
int za[mx],zb[mx],zc[mx];
int a,b,c;
long long wynik;
long long solve(){
    long long w=0;
    char ost='d';
    int seria=0;
    for(int i=0;i<s.size();++i){
        if(s[i]==ost){
            ++seria;
        }
        else{
            seria=1;
            ost=s[i];
        }
        w+=seria;
    }
    return w;
}
long long solve2(char a, char b, char c){
    long long w=0;
    map<int,int>bilans;
    bilans[0]=1;
    int bil=0;
    for(int i=0;i<s.size();++i){
        if(s[i]==c){
            bilans.clear();
            bilans[0]=1;
            bil=0;
        }
        else{
            if(s[i]==a)++bil;
            else --bil;
            auto it=bilans.find(bil);
            if(it!=bilans.end()){
                w+=bilans[bil];
                ++bilans[bil];
            }
            else{
                bilans[bil]=1;
            }
        }
    }
    return w;
}
long long solve3(){
    long long w=0;
    map<pair<pair<int,int>,int>,int>mapa;
    mapa[{{0,0},0}]=1;
    int a=0,b=0,c=0;
    for(int i=0;i<s.size();++i){
        if(s[i]=='a')++a;
        else if(s[i]=='b')++b;
        else ++c;
        int m=min(min(a,b),c);
        a-=m;
        b-=m;
        c-=m;
        pair<pair<int,int>,int> klucz={{a,b},c};
        auto it=mapa.find(klucz);
        if(it!=mapa.end()){
            w+=mapa[klucz];
            ++mapa[klucz];
        }
        else{
            mapa[klucz]=1;
        }
    }
    return w;
}
int main(){
    ios::sync_with_stdio(false);
    cin>>s;
    for(int i=0;i<s.size();++i){
        if(s[i]=='a')++a;
        else if(s[i]=='b')++b;
        else ++c;
        za[i]=a;
        zb[i]=b;
        zc[i]=c;
    }
    wynik+=solve();
    wynik+=solve2('a','b','c');
    wynik+=solve2('a','c','b');
    wynik+=solve2('b','c','a');
    wynik+=solve3();
    cout<<wynik;
    return 0;
}