#include <iostream> #include <cstdio> using namespace std; const int S = 4, P = 37; long long hasz[S][2], c, pot[S]; long long pierwsze[S]; int main() { pierwsze[0] = 1e17 + 13; pierwsze[1] = 1e17 + 337; pierwsze[2] = 1e17 + 141; pierwsze[3] = 1e17 + 49; c = getchar(); while(c!='\n') c = getchar(); c = getchar(); for(int i=0;i<S;i++) pot[i]=1; while(c!='\n') { c -= 'a' - 1; for(int i=0;i<S;i++) { hasz[i][0] = P * hasz[i][0] + c; hasz[i][0] %= pierwsze[i]; hasz[i][1] += pot[i] * c; hasz[i][1] %=pierwsze[i]; } for(int i=0;i<S;i++) { pot[i]*=P; pot[i]%=pierwsze[i]; } c = getchar(); } bool ok = 1; for(int i=0;i<S;i++) if(hasz[i][0]!=hasz[i][1]) ok = 0; if(ok) printf("TAK"); else printf("NIE"); 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 | #include <iostream> #include <cstdio> using namespace std; const int S = 4, P = 37; long long hasz[S][2], c, pot[S]; long long pierwsze[S]; int main() { pierwsze[0] = 1e17 + 13; pierwsze[1] = 1e17 + 337; pierwsze[2] = 1e17 + 141; pierwsze[3] = 1e17 + 49; c = getchar(); while(c!='\n') c = getchar(); c = getchar(); for(int i=0;i<S;i++) pot[i]=1; while(c!='\n') { c -= 'a' - 1; for(int i=0;i<S;i++) { hasz[i][0] = P * hasz[i][0] + c; hasz[i][0] %= pierwsze[i]; hasz[i][1] += pot[i] * c; hasz[i][1] %=pierwsze[i]; } for(int i=0;i<S;i++) { pot[i]*=P; pot[i]%=pierwsze[i]; } c = getchar(); } bool ok = 1; for(int i=0;i<S;i++) if(hasz[i][0]!=hasz[i][1]) ok = 0; if(ok) printf("TAK"); else printf("NIE"); return 0; } |