#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; #define PB push_back #define ST first #define ND second pll base=pll(29, 31); const pll mod = pll(1e9+7, 1e9+9); pll operator+(const pll a, const pll b) { return pll(a.ST+b.ST, a.ND+b.ND); } pll operator*(const pll a, const pll b) { return pll(a.ST*b.ST, a.ND*b.ND); } pll operator%(const pll a, const pll b) { return pll(a.ST%b.ST, a.ND%b.ND); } int main() { int n; pll a=pll(0,0), b=pll(0,0), p=pll(1,1); char c; while(true) { c = getc(stdin); if('a' <= c && c <= 'z') break; } do { pll x = pll(c - 'a', c - 'a'); a = (a+p*x)%mod; b = (base*b + x)%mod; p = (p*(base))%mod; }while((c = getc(stdin)) >= 'a'); a = (a%mod+mod)%mod; b = (b%mod+mod)%mod; if(a == b) 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 41 42 43 44 45 46 | #include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; #define PB push_back #define ST first #define ND second pll base=pll(29, 31); const pll mod = pll(1e9+7, 1e9+9); pll operator+(const pll a, const pll b) { return pll(a.ST+b.ST, a.ND+b.ND); } pll operator*(const pll a, const pll b) { return pll(a.ST*b.ST, a.ND*b.ND); } pll operator%(const pll a, const pll b) { return pll(a.ST%b.ST, a.ND%b.ND); } int main() { int n; pll a=pll(0,0), b=pll(0,0), p=pll(1,1); char c; while(true) { c = getc(stdin); if('a' <= c && c <= 'z') break; } do { pll x = pll(c - 'a', c - 'a'); a = (a+p*x)%mod; b = (base*b + x)%mod; p = (p*(base))%mod; }while((c = getc(stdin)) >= 'a'); a = (a%mod+mod)%mod; b = (b%mod+mod)%mod; if(a == b) printf("TAK\n"); else printf("NIE\n"); return 0; } |