#include <bits/stdc++.h> using namespace std; long long big1 = 91852351; long long big2 = 91252367; long long small1 = 95239; long long small2 = 91237; long long inv1 = 77477365; long long inv2 = 39999736; long long tab1a; long long tab1b; long long tab2a; long long tab2b; int N; long long potega(long long a, long long mod, int p){ if(p == 0){ return 1; } else if(p == 1){ return a % mod; } long long w = potega(a, mod, p/2); w *= w; w %= mod; if(p % 2 == 1){ w *= a; w %= mod; } return w; } void dodaj(int x){ N++; tab1a *= small1; tab1a += x; tab1a %= big1; tab1b *= inv1; tab1b += x; tab1b %= big1; tab2a *= small2; tab2a += x; tab2a %= big2; tab2b *= inv2; tab2b += x; tab2b %= big2; } void check(){ bool czy = true; tab1b *= potega(small1, big1, N - 1); tab1b %= big1; if(tab1a != tab1b){ czy = false; } tab2b *= potega(small2, big2, N - 1); tab2b %= big2; if(tab2a != tab2b){ czy = false; } if(czy){ cout << "TAK" << endl; } else { cout << "NIE" << endl; } } int main(){ cin >> N; N = 0; tab1a = 0; tab2a = 0; tab1b = 0; tab2b = 0; int c; for(;;){ c = getchar(); if(c == EOF){ break; } else if((c <= 122) && (c >= 97)){ dodaj(c); } } //cout << endl; check(); }
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 <bits/stdc++.h> using namespace std; long long big1 = 91852351; long long big2 = 91252367; long long small1 = 95239; long long small2 = 91237; long long inv1 = 77477365; long long inv2 = 39999736; long long tab1a; long long tab1b; long long tab2a; long long tab2b; int N; long long potega(long long a, long long mod, int p){ if(p == 0){ return 1; } else if(p == 1){ return a % mod; } long long w = potega(a, mod, p/2); w *= w; w %= mod; if(p % 2 == 1){ w *= a; w %= mod; } return w; } void dodaj(int x){ N++; tab1a *= small1; tab1a += x; tab1a %= big1; tab1b *= inv1; tab1b += x; tab1b %= big1; tab2a *= small2; tab2a += x; tab2a %= big2; tab2b *= inv2; tab2b += x; tab2b %= big2; } void check(){ bool czy = true; tab1b *= potega(small1, big1, N - 1); tab1b %= big1; if(tab1a != tab1b){ czy = false; } tab2b *= potega(small2, big2, N - 1); tab2b %= big2; if(tab2a != tab2b){ czy = false; } if(czy){ cout << "TAK" << endl; } else { cout << "NIE" << endl; } } int main(){ cin >> N; N = 0; tab1a = 0; tab2a = 0; tab1b = 0; tab2b = 0; int c; for(;;){ c = getchar(); if(c == EOF){ break; } else if((c <= 122) && (c >= 97)){ dodaj(c); } } //cout << endl; check(); } |