#include <cstdio> template <long long s, long long q> class Hash { long long qPow; long long value1; long long value2; public: Hash() : qPow(1), value1(0), value2(0) {} void push(long long x) { // value1 += qPow * x; // value1 &= s; value1 = (qPow * x + value1) & s; // qPow *= q; // qPow &= s; qPow = (qPow * q) & s; // value2 *= q; // value2 += x; // value2 &= s; value2 = (value2 * q + x) & s; } bool err() { return value1 != value2; } void show() { printf("%lld\n", value1); printf("%lld\n", value2); printf("\n"); } }; const int bufSize = 1024 * 1024; char buf[bufSize]; bool solve() { Hash<0x7fffffff, 123444789> h0; Hash<0x7fffffff, 44338853> h1; Hash<0x7fffffff, 7212177> h2; Hash<0x7fffffff, 3299821> h3; Hash<0x3fffffff, 777445557> h4; Hash<0x3fffffff, 324354651> h5; Hash<0x3fffffff, 9874329> h6; Hash<0x1fffffff, 332213> h7; Hash<0x1fffffff, 54637> h8; Hash<0x1fffffff, 1009> h9; char c; bool eof = false; while (eof == false) { size_t n = fread(buf, 1, bufSize, stdin); if (n != bufSize && feof(stdin) != 0) eof = true; for (int i=0; i<n; ++i) { if (buf[i] < 'a' || 'z' < buf[i]) continue; h0.push(buf[i]); h1.push(buf[i]); h2.push(buf[i]); h3.push(buf[i]); h4.push(buf[i]); h5.push(buf[i]); h6.push(buf[i]); h7.push(buf[i]); h8.push(buf[i]); h9.push(buf[i]); } } if (h0.err()) return false; if (h1.err()) return false; if (h2.err()) return false; if (h3.err()) return false; if (h4.err()) return false; if (h5.err()) return false; if (h6.err()) return false; if (h7.err()) return false; if (h8.err()) return false; if (h9.err()) return false; return true; } int main() { printf("%s\n", solve() ? "TAK" : "NIE"); 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 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 | #include <cstdio> template <long long s, long long q> class Hash { long long qPow; long long value1; long long value2; public: Hash() : qPow(1), value1(0), value2(0) {} void push(long long x) { // value1 += qPow * x; // value1 &= s; value1 = (qPow * x + value1) & s; // qPow *= q; // qPow &= s; qPow = (qPow * q) & s; // value2 *= q; // value2 += x; // value2 &= s; value2 = (value2 * q + x) & s; } bool err() { return value1 != value2; } void show() { printf("%lld\n", value1); printf("%lld\n", value2); printf("\n"); } }; const int bufSize = 1024 * 1024; char buf[bufSize]; bool solve() { Hash<0x7fffffff, 123444789> h0; Hash<0x7fffffff, 44338853> h1; Hash<0x7fffffff, 7212177> h2; Hash<0x7fffffff, 3299821> h3; Hash<0x3fffffff, 777445557> h4; Hash<0x3fffffff, 324354651> h5; Hash<0x3fffffff, 9874329> h6; Hash<0x1fffffff, 332213> h7; Hash<0x1fffffff, 54637> h8; Hash<0x1fffffff, 1009> h9; char c; bool eof = false; while (eof == false) { size_t n = fread(buf, 1, bufSize, stdin); if (n != bufSize && feof(stdin) != 0) eof = true; for (int i=0; i<n; ++i) { if (buf[i] < 'a' || 'z' < buf[i]) continue; h0.push(buf[i]); h1.push(buf[i]); h2.push(buf[i]); h3.push(buf[i]); h4.push(buf[i]); h5.push(buf[i]); h6.push(buf[i]); h7.push(buf[i]); h8.push(buf[i]); h9.push(buf[i]); } } if (h0.err()) return false; if (h1.err()) return false; if (h2.err()) return false; if (h3.err()) return false; if (h4.err()) return false; if (h5.err()) return false; if (h6.err()) return false; if (h7.err()) return false; if (h8.err()) return false; if (h9.err()) return false; return true; } int main() { printf("%s\n", solve() ? "TAK" : "NIE"); return 0; } |