#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;
}
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; } |
English