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