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