#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
#define getx getchar_unlocked
const ll mod = 1e9 + 7;
ll p[]= {104717, 104723, 104729};
inline int wczytaj(){
char c;
int res = 0;
do{
c = getx();
}while(c > '9' || c < '0');
do{
res = res*10 + c - '0';
c = getx();
}while(c >= '0' && c <= '9');
return res;
}
ll mnoz[3], gora[3], dol[3];
main(){
n = wczytaj();
char c;
do{
c = getx();
}while(c > 'z' || c < 'a');
for(int i=0; i<3; i++) mnoz[i] = 1;
do{
for(int i=0; i<3; i++){
gora[i] = (gora[i]*p[i]%mod + c-'a'+1) % mod;
dol[i] = (dol[i] + mnoz[i]*(c-'a'+1)%mod)%mod;
mnoz[i] = mnoz[i]*p[i]%mod;
}
c = getx();
}while(c >= 'a' && c <= 'z');
if(gora[0] == dol[0] && gora[1] == dol[1] && gora[2] == dol[2]){
cout << "TAK";
}
else cout << "NIE";
}
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; int n; #define getx getchar_unlocked const ll mod = 1e9 + 7; ll p[]= {104717, 104723, 104729}; inline int wczytaj(){ char c; int res = 0; do{ c = getx(); }while(c > '9' || c < '0'); do{ res = res*10 + c - '0'; c = getx(); }while(c >= '0' && c <= '9'); return res; } ll mnoz[3], gora[3], dol[3]; main(){ n = wczytaj(); char c; do{ c = getx(); }while(c > 'z' || c < 'a'); for(int i=0; i<3; i++) mnoz[i] = 1; do{ for(int i=0; i<3; i++){ gora[i] = (gora[i]*p[i]%mod + c-'a'+1) % mod; dol[i] = (dol[i] + mnoz[i]*(c-'a'+1)%mod)%mod; mnoz[i] = mnoz[i]*p[i]%mod; } c = getx(); }while(c >= 'a' && c <= 'z'); if(gora[0] == dol[0] && gora[1] == dol[1] && gora[2] == dol[2]){ cout << "TAK"; } else cout << "NIE"; } |
English