#include <iostream> #include <cstdio> using namespace std; int k; long long mod1, mod2, hash1_pocz, hash1_kon, hash2_pocz, hash2_kon, pot1, pot2, zn; char znak; int main () { mod1 = 136058642903501LL; mod2 = 471620492140439LL; pot1 = pot2 = 1; scanf("%d\n", &k); while (1) { if (scanf("%c", &znak) != 1) break; if (znak < 'a') break; if (znak > 'z') break; zn = (long long)(znak - 'a'); hash1_pocz += pot1 * zn; pot1 *= 26; hash1_kon *= 26; hash1_kon += zn; hash2_pocz += pot2 * zn; pot2 *= 26; hash2_kon *= 26; hash2_kon += zn; hash1_pocz %= mod1; hash1_kon %= mod1; pot1 %= mod1; hash2_pocz %= mod2; hash2_kon %= mod2; pot2 %= mod2; } if (hash1_pocz == hash1_kon && hash2_pocz == hash2_kon) 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 | #include <iostream> #include <cstdio> using namespace std; int k; long long mod1, mod2, hash1_pocz, hash1_kon, hash2_pocz, hash2_kon, pot1, pot2, zn; char znak; int main () { mod1 = 136058642903501LL; mod2 = 471620492140439LL; pot1 = pot2 = 1; scanf("%d\n", &k); while (1) { if (scanf("%c", &znak) != 1) break; if (znak < 'a') break; if (znak > 'z') break; zn = (long long)(znak - 'a'); hash1_pocz += pot1 * zn; pot1 *= 26; hash1_kon *= 26; hash1_kon += zn; hash2_pocz += pot2 * zn; pot2 *= 26; hash2_kon *= 26; hash2_kon += zn; hash1_pocz %= mod1; hash1_kon %= mod1; pot1 %= mod1; hash2_pocz %= mod2; hash2_kon %= mod2; pot2 %= mod2; } if (hash1_pocz == hash1_kon && hash2_pocz == hash2_kon) printf("TAK\n"); else printf("NIE\n"); return 0; } |