#include <algorithm> #include <iostream> std::string s; long long res = 0; int A[300001]; int B[300001]; int C[300001]; std::pair<int,int> detect[300001]; void count() { std::sort(detect, detect + s.size() + 1); long long tmp = 1; for( int i = 1; i <= s.size(); i++) { if( detect[i] == detect[i-1] ) tmp++; else { res += tmp*(tmp-1)/2; tmp = 1; } } res += tmp*(tmp-1)/2; } int main() { std::ios_base::sync_with_stdio(false); std::cin >> s; //count 3-letters for( int i = 0; i < s.size(); i++ ) { A[i+1] = A[i]; B[i+1] = B[i]; C[i+1] = C[i]; if( s[i] == 'a' ) A[i+1]++; else if( s[i] == 'b' ) B[i+1]++; else if( s[i] == 'c' ) C[i+1]++; } for( int i = 0; i < s.size(); i++ ) detect[i+1] = std::make_pair(A[i+1]-B[i+1],A[i+1]-C[i+1]); count(); //count 2-letters detect[0] = std::make_pair(0,0); for( int i = 0; i < s.size(); i++ ) detect[i+1] = std::make_pair(A[i+1],B[i+1]-C[i+1]); count(); detect[0] = std::make_pair(0,0); for( int i = 0; i < s.size(); i++ ) detect[i+1] = std::make_pair(B[i+1],A[i+1]-C[i+1]); count(); detect[0] = std::make_pair(0,0); for( int i = 0; i < s.size(); i++ ) detect[i+1] = std::make_pair(C[i+1],A[i+1]-B[i+1]); count(); //count one letters long long t = 1; for( int i = 1; i < s.size(); i++) { if( s[i] == s[i-1] ) t++; else { res += t*(t+1)/2; t = 1; } } res += t*(t+1)/2; std::cout << res << '\n'; 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 | #include <algorithm> #include <iostream> std::string s; long long res = 0; int A[300001]; int B[300001]; int C[300001]; std::pair<int,int> detect[300001]; void count() { std::sort(detect, detect + s.size() + 1); long long tmp = 1; for( int i = 1; i <= s.size(); i++) { if( detect[i] == detect[i-1] ) tmp++; else { res += tmp*(tmp-1)/2; tmp = 1; } } res += tmp*(tmp-1)/2; } int main() { std::ios_base::sync_with_stdio(false); std::cin >> s; //count 3-letters for( int i = 0; i < s.size(); i++ ) { A[i+1] = A[i]; B[i+1] = B[i]; C[i+1] = C[i]; if( s[i] == 'a' ) A[i+1]++; else if( s[i] == 'b' ) B[i+1]++; else if( s[i] == 'c' ) C[i+1]++; } for( int i = 0; i < s.size(); i++ ) detect[i+1] = std::make_pair(A[i+1]-B[i+1],A[i+1]-C[i+1]); count(); //count 2-letters detect[0] = std::make_pair(0,0); for( int i = 0; i < s.size(); i++ ) detect[i+1] = std::make_pair(A[i+1],B[i+1]-C[i+1]); count(); detect[0] = std::make_pair(0,0); for( int i = 0; i < s.size(); i++ ) detect[i+1] = std::make_pair(B[i+1],A[i+1]-C[i+1]); count(); detect[0] = std::make_pair(0,0); for( int i = 0; i < s.size(); i++ ) detect[i+1] = std::make_pair(C[i+1],A[i+1]-B[i+1]); count(); //count one letters long long t = 1; for( int i = 1; i < s.size(); i++) { if( s[i] == s[i-1] ) t++; else { res += t*(t+1)/2; t = 1; } } res += t*(t+1)/2; std::cout << res << '\n'; return 0; } |