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