#include <cstdio>
bool is_letter(const char c)
{
return ((c >= 'a') && (c <= 'z'));
}
int m[128];
void init_m()
{
m['a'] = 'h';
m['b'] = 'o';
m['c'] = 'x';
m['d'] = 'c';
m['e'] = 's';
m['f'] = 'n';
m['g'] = 'g';
m['h'] = 'v';
m['i'] = 'k';
m['j'] = 'a';
m['k'] = 'y';
m['l'] = 'p';
m['m'] = 'i';
m['n'] = 'u';
m['o'] = 'm';
m['p'] = 'r';
m['q'] = 'b';
m['r'] = 'j';
m['s'] = 'z';
m['t'] = 'e';
m['u'] = 'w';
m['v'] = 'l';
m['w'] = 't';
m['x'] = 'd';
m['y'] = 'q';
m['z'] = 'f';
}
int main()
{
init_m();
int n;
scanf("%d", &n);
int c = getchar();
while(!is_letter(c))
c = getchar();
unsigned long long left_to_right_hash_7 = 0LLU;
unsigned long long right_to_left_hash_7 = 0LLU;
unsigned long long left_to_right_hash_17 = 0LLU;
unsigned long long right_to_left_hash_17 = 0LLU;
unsigned long long left_to_right_hash_29 = 0LLU;
unsigned long long right_to_left_hash_29 = 0LLU;
unsigned long long k_7 = 0LLU;
unsigned long long kk_7 = 1LLU;
unsigned long long k_17 = 0LLU;
unsigned long long kk_17 = 1LLU;
unsigned long long k_29 = 0LLU;
unsigned long long kk_29 = 1LLU;
while(is_letter(c))
{
c = m[c];
left_to_right_hash_7 = 7LLU * left_to_right_hash_7 + c;
right_to_left_hash_7 = right_to_left_hash_7 + kk_7 * c;
left_to_right_hash_17 = 17LLU * left_to_right_hash_17 + c;
right_to_left_hash_17 = right_to_left_hash_17 + kk_17 * c;
left_to_right_hash_29 = 29LLU * left_to_right_hash_29 + c;
right_to_left_hash_29 = right_to_left_hash_29 + kk_29 * c;
++k_7;
kk_7 *= 7LLU;
++k_17;
kk_17 *= 17LLU;
++k_29;
kk_29 *= 29LLU;
c = getchar();
}
if((left_to_right_hash_7 == right_to_left_hash_7) &&
(left_to_right_hash_17 == right_to_left_hash_17) &&
(left_to_right_hash_29 == right_to_left_hash_29))
{
printf("TAK\n");
}
else
{
printf("NIE\n");
}
}
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 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 | #include <cstdio> bool is_letter(const char c) { return ((c >= 'a') && (c <= 'z')); } int m[128]; void init_m() { m['a'] = 'h'; m['b'] = 'o'; m['c'] = 'x'; m['d'] = 'c'; m['e'] = 's'; m['f'] = 'n'; m['g'] = 'g'; m['h'] = 'v'; m['i'] = 'k'; m['j'] = 'a'; m['k'] = 'y'; m['l'] = 'p'; m['m'] = 'i'; m['n'] = 'u'; m['o'] = 'm'; m['p'] = 'r'; m['q'] = 'b'; m['r'] = 'j'; m['s'] = 'z'; m['t'] = 'e'; m['u'] = 'w'; m['v'] = 'l'; m['w'] = 't'; m['x'] = 'd'; m['y'] = 'q'; m['z'] = 'f'; } int main() { init_m(); int n; scanf("%d", &n); int c = getchar(); while(!is_letter(c)) c = getchar(); unsigned long long left_to_right_hash_7 = 0LLU; unsigned long long right_to_left_hash_7 = 0LLU; unsigned long long left_to_right_hash_17 = 0LLU; unsigned long long right_to_left_hash_17 = 0LLU; unsigned long long left_to_right_hash_29 = 0LLU; unsigned long long right_to_left_hash_29 = 0LLU; unsigned long long k_7 = 0LLU; unsigned long long kk_7 = 1LLU; unsigned long long k_17 = 0LLU; unsigned long long kk_17 = 1LLU; unsigned long long k_29 = 0LLU; unsigned long long kk_29 = 1LLU; while(is_letter(c)) { c = m[c]; left_to_right_hash_7 = 7LLU * left_to_right_hash_7 + c; right_to_left_hash_7 = right_to_left_hash_7 + kk_7 * c; left_to_right_hash_17 = 17LLU * left_to_right_hash_17 + c; right_to_left_hash_17 = right_to_left_hash_17 + kk_17 * c; left_to_right_hash_29 = 29LLU * left_to_right_hash_29 + c; right_to_left_hash_29 = right_to_left_hash_29 + kk_29 * c; ++k_7; kk_7 *= 7LLU; ++k_17; kk_17 *= 17LLU; ++k_29; kk_29 *= 29LLU; c = getchar(); } if((left_to_right_hash_7 == right_to_left_hash_7) && (left_to_right_hash_17 == right_to_left_hash_17) && (left_to_right_hash_29 == right_to_left_hash_29)) { printf("TAK\n"); } else { printf("NIE\n"); } } |
English