#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; } } |
English