#include <cstdlib>
#include <cstdio>
int main()
{
const long long int PRIME1 = 29LL;
const long long int PRIME2 = 59LL;
const long long int MODULO1 = 1000003LL;
const long long int MODULO2 = 1000000007LL;
long long int hashLR1 = 0LL;
long long int hashLR2 = 0LL;
long long int hashRL1 = 0LL;
long long int hashRL2 = 0LL;
long long int pr1_pow = 1LL;
long long int pr2_pow = 1LL;
int n;
char c;
scanf("%d", &n);
if(n > 0)
{
while(n > 0)
{
scanf(" %c", &c);
hashRL1 = (PRIME1 * hashRL1 + (+c - 'a' + 1)) % MODULO1;
hashRL2 = (PRIME2 * hashRL2 + (+c - 'a' + 1)) % MODULO2;
hashLR1 = (hashLR1 + pr1_pow * (+c - 'a' + 1)) % MODULO1;
hashLR2 = (hashLR2 + pr2_pow * (+c - 'a' + 1)) % MODULO2;
pr1_pow = (pr1_pow * PRIME1) % MODULO1;
pr2_pow = (pr2_pow * PRIME2) % MODULO2;
--n;
}
}
else
{
int rd = scanf(" %c", &c);
while(rd != EOF && c >= 'a' && c <= 'z')
{
hashRL1 = (PRIME1 * hashRL1 + (+c - 'a' + 1)) % MODULO1;
hashRL2 = (PRIME2 * hashRL2 + (+c - 'a' + 1)) % MODULO2;
hashLR1 = (hashLR1 + pr1_pow * (+c - 'a' + 1)) % MODULO1;
hashLR2 = (hashLR2 + pr2_pow * (+c - 'a' + 1)) % MODULO2;
pr1_pow = (pr1_pow * PRIME1) % MODULO1;
pr2_pow = (pr2_pow * PRIME2) % MODULO2;
rd = scanf("%c", &c);
}
}
if(hashLR1 == hashRL1 && hashLR2 == hashRL2)
printf("TAK\n");
else
printf("NIE\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 | #include <cstdlib> #include <cstdio> int main() { const long long int PRIME1 = 29LL; const long long int PRIME2 = 59LL; const long long int MODULO1 = 1000003LL; const long long int MODULO2 = 1000000007LL; long long int hashLR1 = 0LL; long long int hashLR2 = 0LL; long long int hashRL1 = 0LL; long long int hashRL2 = 0LL; long long int pr1_pow = 1LL; long long int pr2_pow = 1LL; int n; char c; scanf("%d", &n); if(n > 0) { while(n > 0) { scanf(" %c", &c); hashRL1 = (PRIME1 * hashRL1 + (+c - 'a' + 1)) % MODULO1; hashRL2 = (PRIME2 * hashRL2 + (+c - 'a' + 1)) % MODULO2; hashLR1 = (hashLR1 + pr1_pow * (+c - 'a' + 1)) % MODULO1; hashLR2 = (hashLR2 + pr2_pow * (+c - 'a' + 1)) % MODULO2; pr1_pow = (pr1_pow * PRIME1) % MODULO1; pr2_pow = (pr2_pow * PRIME2) % MODULO2; --n; } } else { int rd = scanf(" %c", &c); while(rd != EOF && c >= 'a' && c <= 'z') { hashRL1 = (PRIME1 * hashRL1 + (+c - 'a' + 1)) % MODULO1; hashRL2 = (PRIME2 * hashRL2 + (+c - 'a' + 1)) % MODULO2; hashLR1 = (hashLR1 + pr1_pow * (+c - 'a' + 1)) % MODULO1; hashLR2 = (hashLR2 + pr2_pow * (+c - 'a' + 1)) % MODULO2; pr1_pow = (pr1_pow * PRIME1) % MODULO1; pr2_pow = (pr2_pow * PRIME2) % MODULO2; rd = scanf("%c", &c); } } if(hashLR1 == hashRL1 && hashLR2 == hashRL2) printf("TAK\n"); else printf("NIE\n"); return 0; } |
English