#include <iostream> using namespace std; long long hasze[32][32]; long long pot2[32]; long long Modulo=1e9+7; long long fastPowModulo(long long a,long long n) { long long wynik = 1; while(n>0){ if(n%2==1){ wynik*=a; wynik%=Modulo; } n/=2; a*=a; a=a%Modulo; } return wynik; } long long zamienCharNaInt(char c) { long long a = c - 'a'; a++; return a; } long long liczHasz(long long a,long long pot) { long long c = (a*fastPowModulo(37,pot))%Modulo; return c; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; for(int i=0;i<=30;i++){ pot2[i]=fastPowModulo(2,i); } if(n!=0){ if(n%2==0){ long long haszL = 0; for(int i=1;i<=n/2;i++){ char c; cin >> c; long long a = zamienCharNaInt(c); haszL+=liczHasz(a,i); haszL=haszL%Modulo; } long long haszP = 0; for(int i=n/2+1;i<=n;i++){ char c; cin >> c; long long a = zamienCharNaInt(c); haszP+=liczHasz(a,n-i+1); haszP=haszP%Modulo; } if(haszP==haszL){ printf("TAK"); return 0; } else { printf("NIE"); return 0; } } else { long long haszL = 0; for(int i=1;i<=n/2;i++){ char c; cin >> c; long long a = zamienCharNaInt(c); haszL+=liczHasz(a,i); haszL=haszL%Modulo; } char o; cin >> o; long long haszP = 0; for(int i=n/2+2;i<=n;i++){ char c; cin >> c; long long a = zamienCharNaInt(c); haszP+=liczHasz(a,n-i+1); haszP=haszP%Modulo; } if(haszP==haszL){ cout << "TAK"; return 0; } else { cout << "NIE"; return 0; } } } else { string s; cin >> s; for(int i=0;i<s.size();i++){ if(s[i]!=s[s.size()-i-1]){ printf("NIE"); return 0; } } printf("TAK"); 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 90 91 92 93 94 95 96 97 98 99 100 | #include <iostream> using namespace std; long long hasze[32][32]; long long pot2[32]; long long Modulo=1e9+7; long long fastPowModulo(long long a,long long n) { long long wynik = 1; while(n>0){ if(n%2==1){ wynik*=a; wynik%=Modulo; } n/=2; a*=a; a=a%Modulo; } return wynik; } long long zamienCharNaInt(char c) { long long a = c - 'a'; a++; return a; } long long liczHasz(long long a,long long pot) { long long c = (a*fastPowModulo(37,pot))%Modulo; return c; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; for(int i=0;i<=30;i++){ pot2[i]=fastPowModulo(2,i); } if(n!=0){ if(n%2==0){ long long haszL = 0; for(int i=1;i<=n/2;i++){ char c; cin >> c; long long a = zamienCharNaInt(c); haszL+=liczHasz(a,i); haszL=haszL%Modulo; } long long haszP = 0; for(int i=n/2+1;i<=n;i++){ char c; cin >> c; long long a = zamienCharNaInt(c); haszP+=liczHasz(a,n-i+1); haszP=haszP%Modulo; } if(haszP==haszL){ printf("TAK"); return 0; } else { printf("NIE"); return 0; } } else { long long haszL = 0; for(int i=1;i<=n/2;i++){ char c; cin >> c; long long a = zamienCharNaInt(c); haszL+=liczHasz(a,i); haszL=haszL%Modulo; } char o; cin >> o; long long haszP = 0; for(int i=n/2+2;i<=n;i++){ char c; cin >> c; long long a = zamienCharNaInt(c); haszP+=liczHasz(a,n-i+1); haszP=haszP%Modulo; } if(haszP==haszL){ cout << "TAK"; return 0; } else { cout << "NIE"; return 0; } } } else { string s; cin >> s; for(int i=0;i<s.size();i++){ if(s[i]!=s[s.size()-i-1]){ printf("NIE"); return 0; } } printf("TAK"); return 0; } } |