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