#include<bits/stdc++.h>
using namespace std;
#define rozmiar 300001
long long tab[rozmiar][3];
vector<unsigned long long> wartosc;
unsigned long long odp, x;
int main(){
ios_base::sync_with_stdio(0), cin.tie(0);
string a;
int n;
cin >> a;
n=a.length();
//cout << n << endl;
tab[0][int(a[0])-97]=1;
for(int i=1;i<n;i++){
//cout << tab[i-1][0] << " " << tab[i-1][1] << " " << tab[i-1][2] << endl;
tab[i][0]=tab[i-1][0];
tab[i][1]=tab[i-1][1];
tab[i][2]=tab[i-1][2];
tab[i][int(a[i])-97]+=1;
if(tab[i][0]>0 && tab[i][1]>0 && tab[i][2]>0){
tab[i][0]--;
tab[i][1]--;
tab[i][2]--;
}
}
for(int i=0;i<n;i++){
x=rozmiar*(tab[i][2]);
x=rozmiar*x;
x+=tab[i][0]+rozmiar*tab[i][1];
wartosc.push_back(x);
}
sort(wartosc.begin(), wartosc.end());
int ile=1;
int i=1;
while(i<n){
//cout << i << " " << ile << endl;
if(wartosc[i-1]==wartosc[i]){
ile++;
}else{
odp+=ile*(ile+1)/2;
}
i++;
}
odp+=ile*(ile+1)/2;
cout << odp << "\n";
}
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 | #include<bits/stdc++.h> using namespace std; #define rozmiar 300001 long long tab[rozmiar][3]; vector<unsigned long long> wartosc; unsigned long long odp, x; int main(){ ios_base::sync_with_stdio(0), cin.tie(0); string a; int n; cin >> a; n=a.length(); //cout << n << endl; tab[0][int(a[0])-97]=1; for(int i=1;i<n;i++){ //cout << tab[i-1][0] << " " << tab[i-1][1] << " " << tab[i-1][2] << endl; tab[i][0]=tab[i-1][0]; tab[i][1]=tab[i-1][1]; tab[i][2]=tab[i-1][2]; tab[i][int(a[i])-97]+=1; if(tab[i][0]>0 && tab[i][1]>0 && tab[i][2]>0){ tab[i][0]--; tab[i][1]--; tab[i][2]--; } } for(int i=0;i<n;i++){ x=rozmiar*(tab[i][2]); x=rozmiar*x; x+=tab[i][0]+rozmiar*tab[i][1]; wartosc.push_back(x); } sort(wartosc.begin(), wartosc.end()); int ile=1; int i=1; while(i<n){ //cout << i << " " << ile << endl; if(wartosc[i-1]==wartosc[i]){ ile++; }else{ odp+=ile*(ile+1)/2; } i++; } odp+=ile*(ile+1)/2; cout << odp << "\n"; } |
English