#include <iostream> #include <map> #include <fstream> #include <string.h> #include <map> #include <algorithm> using namespace std; char slowo[300001]; int dl; long long liczba_par(const map<long long, long long>& wyst){ long long wynik=0; for(auto it = wyst.begin(); it!=wyst.end(); it++) wynik+=((it->second))*((it->second)-1); return wynik/2; } /* map<pair<int, int>, long long> abc; ///(a-c, b-c) map<pair<int, int>, long long> ab; ///(a-b, c) map<pair<int, int>, long long> ac; ///(a-c, b) map<pair<int, int>, long long> bc; ///(b-c, a) map<pair<int, int>, long long> a; ///(b, c) map<pair<int, int>, long long> b; ///(a, c) map<pair<int, int>, long long> c; ///(a, b) void dodaj(int licza, int liczb, int liczc){ abc[make_pair(licza-liczc, liczb-liczc)]++; ab[make_pair(licza-liczb, liczc)]++; ac[make_pair(licza-liczc, liczb)]++; bc[make_pair(liczb-liczc, licza)]++; a[make_pair(liczb, liczc)]++; b[make_pair(licza, liczc)]++; c[make_pair(licza, liczb)]++; } */ map<long long, long long> abc; ///(a-c, b-c) map<long long, long long> ab; ///(a-b, c) map<long long, long long> ac; ///(a-c, b) map<long long, long long> bc; ///(b-c, a) map<long long, long long> a; ///(b, c) map<long long, long long> b; ///(a, c) map<long long, long long> c; ///(a, b) #define zrob_pare(x, y) (((x)<<32) + (y)) void dodaj(long long licza, long long liczb, long long liczc){ abc[zrob_pare(licza-liczc, liczb-liczc)]++; ab[zrob_pare(licza-liczb, liczc)]++; ac[zrob_pare(licza-liczc, liczb)]++; bc[zrob_pare(liczb-liczc, licza)]++; a[zrob_pare(liczb, liczc)]++; b[zrob_pare(licza, liczc)]++; c[zrob_pare(licza, liczb)]++; } int main() { long long licza=600000; long long liczb=300000; long long liczc=0; scanf("%s", slowo); dl = strlen(slowo); //dl=300000; //for(int i=0; i<dl; i++){ // slowo[i]=('a'+(i%3)); //} dodaj(licza, liczb, liczc); for(int i=0; i<dl; i++) { if(slowo[i]=='a') licza++; else if(slowo[i]=='b') liczb++; else if(slowo[i]=='c') liczc++; dodaj(licza, liczb, liczc); } //cout << "XD" << endl; long long wynik=0; wynik+=liczba_par(abc); wynik+=liczba_par(ab); wynik+=liczba_par(ac); wynik+=liczba_par(bc); wynik+=liczba_par(a); wynik+=liczba_par(b); wynik+=liczba_par(c); 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 | #include <iostream> #include <map> #include <fstream> #include <string.h> #include <map> #include <algorithm> using namespace std; char slowo[300001]; int dl; long long liczba_par(const map<long long, long long>& wyst){ long long wynik=0; for(auto it = wyst.begin(); it!=wyst.end(); it++) wynik+=((it->second))*((it->second)-1); return wynik/2; } /* map<pair<int, int>, long long> abc; ///(a-c, b-c) map<pair<int, int>, long long> ab; ///(a-b, c) map<pair<int, int>, long long> ac; ///(a-c, b) map<pair<int, int>, long long> bc; ///(b-c, a) map<pair<int, int>, long long> a; ///(b, c) map<pair<int, int>, long long> b; ///(a, c) map<pair<int, int>, long long> c; ///(a, b) void dodaj(int licza, int liczb, int liczc){ abc[make_pair(licza-liczc, liczb-liczc)]++; ab[make_pair(licza-liczb, liczc)]++; ac[make_pair(licza-liczc, liczb)]++; bc[make_pair(liczb-liczc, licza)]++; a[make_pair(liczb, liczc)]++; b[make_pair(licza, liczc)]++; c[make_pair(licza, liczb)]++; } */ map<long long, long long> abc; ///(a-c, b-c) map<long long, long long> ab; ///(a-b, c) map<long long, long long> ac; ///(a-c, b) map<long long, long long> bc; ///(b-c, a) map<long long, long long> a; ///(b, c) map<long long, long long> b; ///(a, c) map<long long, long long> c; ///(a, b) #define zrob_pare(x, y) (((x)<<32) + (y)) void dodaj(long long licza, long long liczb, long long liczc){ abc[zrob_pare(licza-liczc, liczb-liczc)]++; ab[zrob_pare(licza-liczb, liczc)]++; ac[zrob_pare(licza-liczc, liczb)]++; bc[zrob_pare(liczb-liczc, licza)]++; a[zrob_pare(liczb, liczc)]++; b[zrob_pare(licza, liczc)]++; c[zrob_pare(licza, liczb)]++; } int main() { long long licza=600000; long long liczb=300000; long long liczc=0; scanf("%s", slowo); dl = strlen(slowo); //dl=300000; //for(int i=0; i<dl; i++){ // slowo[i]=('a'+(i%3)); //} dodaj(licza, liczb, liczc); for(int i=0; i<dl; i++) { if(slowo[i]=='a') licza++; else if(slowo[i]=='b') liczb++; else if(slowo[i]=='c') liczc++; dodaj(licza, liczb, liczc); } //cout << "XD" << endl; long long wynik=0; wynik+=liczba_par(abc); wynik+=liczba_par(ab); wynik+=liczba_par(ac); wynik+=liczba_par(bc); wynik+=liczba_par(a); wynik+=liczba_par(b); wynik+=liczba_par(c); cout << wynik; return 0; } |