#include <bits/stdc++.h> using namespace std; #ifndef _WIN32 #define getchar getchar_unlocked #endif #define MP make_pair #define PB push_back #define ST first #define ND second #define ALL(x) (x).begin(),(x).end() #define SZ(x) ((int)(x).size()) //#define int LLI #define FOR(i,a,b) for(int i = (a); i <= (b); ++i) #define REP(i,n) FOR(i,0,(int)(n)-1) #define F1(i,n) FOR(i,1,n) typedef long long LLI; typedef unsigned long long LLU; typedef long double LD; typedef pair<int, int> pii; typedef pair<LLI, LLI> pll; typedef vector<int> vi; #ifdef ONLINE_JUDGE ostream cnull(NULL); #define cerr cnull #endif template<class TH> void _dbg(const char *sdbg, TH h){cerr<<sdbg<<"="<<h<<"\n";} template<class TH, class... TA> void _dbg(const char *sdbg, TH h, TA... a) { while(*sdbg!=',') cerr<<*sdbg++; cerr<<"="<<h<<","; _dbg(sdbg+1, a...); } #define dbg(...) _dbg(#__VA_ARGS__, __VA_ARGS__) #define dbgV(R) {cerr << #R << "=["; for(int e : R) cerr << e << ", "; cerr << "E]\n";} #define dbgA(R, n) {cerr << #R << "=["; for(int i = 0; i <= n; ++i) cerr << R[i] << ", "; cerr << "E]\n";} #define boost ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0) const int ZAZ = 2; int BASE[ZAZ], potBASE[ZAZ]; int MOD[ZAZ]; int haszL[ZAZ], haszP[ZAZ]; void init(){ REP(i, ZAZ) potBASE[i] = 1; BASE[0] = 131; MOD[0] = 2137148807; BASE[1] = 2137; MOD[1] = 1488213761; //BASE[2] = 89; MOD[2] = 1e9 + 696969; } int32_t main() { init(); register char c; do {c = getchar();} while(c < 'a' || c > 'z'); do{ REP(i, ZAZ){ haszL[i] = (LLI(haszL[i])*BASE[i] + (c - 'a' + 1)) % MOD[i]; haszP[i] = (haszP[i] + LLI(potBASE[i]) * (c - 'a' + 1)) % MOD[i]; potBASE[i] = LLI(potBASE[i]) * BASE[i] % MOD[i]; } c = getchar(); }while(c >= 'a' && c <= 'z'); REP(i, ZAZ) if(haszL[i] != haszP[i]) return 0 * puts("NIE"); puts("TAK"); }
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 | #include <bits/stdc++.h> using namespace std; #ifndef _WIN32 #define getchar getchar_unlocked #endif #define MP make_pair #define PB push_back #define ST first #define ND second #define ALL(x) (x).begin(),(x).end() #define SZ(x) ((int)(x).size()) //#define int LLI #define FOR(i,a,b) for(int i = (a); i <= (b); ++i) #define REP(i,n) FOR(i,0,(int)(n)-1) #define F1(i,n) FOR(i,1,n) typedef long long LLI; typedef unsigned long long LLU; typedef long double LD; typedef pair<int, int> pii; typedef pair<LLI, LLI> pll; typedef vector<int> vi; #ifdef ONLINE_JUDGE ostream cnull(NULL); #define cerr cnull #endif template<class TH> void _dbg(const char *sdbg, TH h){cerr<<sdbg<<"="<<h<<"\n";} template<class TH, class... TA> void _dbg(const char *sdbg, TH h, TA... a) { while(*sdbg!=',') cerr<<*sdbg++; cerr<<"="<<h<<","; _dbg(sdbg+1, a...); } #define dbg(...) _dbg(#__VA_ARGS__, __VA_ARGS__) #define dbgV(R) {cerr << #R << "=["; for(int e : R) cerr << e << ", "; cerr << "E]\n";} #define dbgA(R, n) {cerr << #R << "=["; for(int i = 0; i <= n; ++i) cerr << R[i] << ", "; cerr << "E]\n";} #define boost ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0) const int ZAZ = 2; int BASE[ZAZ], potBASE[ZAZ]; int MOD[ZAZ]; int haszL[ZAZ], haszP[ZAZ]; void init(){ REP(i, ZAZ) potBASE[i] = 1; BASE[0] = 131; MOD[0] = 2137148807; BASE[1] = 2137; MOD[1] = 1488213761; //BASE[2] = 89; MOD[2] = 1e9 + 696969; } int32_t main() { init(); register char c; do {c = getchar();} while(c < 'a' || c > 'z'); do{ REP(i, ZAZ){ haszL[i] = (LLI(haszL[i])*BASE[i] + (c - 'a' + 1)) % MOD[i]; haszP[i] = (haszP[i] + LLI(potBASE[i]) * (c - 'a' + 1)) % MOD[i]; potBASE[i] = LLI(potBASE[i]) * BASE[i] % MOD[i]; } c = getchar(); }while(c >= 'a' && c <= 'z'); REP(i, ZAZ) if(haszL[i] != haszP[i]) return 0 * puts("NIE"); puts("TAK"); } |