#include <iostream>
using namespace std;
int potegowanie(int b)
{
int i;
int wynik = 1;
long int x = 31%1000000007;
for (i=1; i<=b; i<<=1)
{
x %=1000000007;
if ((b&i) != 0)
{
wynik *= x;
wynik %= 1000000007;
}
x *= x;
}
return wynik;
}
int main()
{
ios_base::sync_with_stdio(0);
long long hasz=0, hasz1=0;
char znak;
int ilosc;
string ciag;
cin>>ilosc;
if(ilosc!=0)
{
int liczba=ilosc/2;
if(ilosc%2==1){liczba++;}
int wykladnik=0;
for(int i=1;i<=ilosc;++i)
{
bool stan=0;
cin>>znak;
int numer=(int)znak%96;
// cout<<"numer: "<<numer<<endl;
if(i>liczba)
{wykladnik--;
// cout<<"wykladnik: "<<wykladnik<<endl;
hasz1+=numer*potegowanie(wykladnik);
hasz1%=1000000007;
// cout<<hasz1<<endl;
}
else
{
// cout<<"wykladnik: "<<wykladnik<<endl;
if(ilosc%2==1 && i==liczba){stan=1;}
if(stan==0)
{
hasz+=numer*potegowanie(wykladnik);
hasz%=1000000007;
++wykladnik;
}
// cout<<hasz<<endl;
}
}
if(hasz1==hasz){cout<<"TAK";return 0 ;}
else{cout<<"NIE";return 0;}
}
else
{
cin>>ciag;
ciag="1"+ciag;
int liczba=(ciag.length()-1)/2;
if((ciag.length()-1)%2==1){liczba++;}
int wykladnik=0;
for(int i=1;i<ciag.length();++i)
{
bool stan=0;
znak=ciag[i];
int numer=(int)znak%96;
// cout<<"numer: "<<numer<<endl;
if(i>liczba)
{wykladnik--;
// cout<<"wykladnik: "<<wykladnik<<endl;
hasz1+=numer*potegowanie(wykladnik);
hasz1%=1000000007;
// cout<<hasz1<<endl;
}
else
{
// cout<<"wykladnik: "<<wykladnik<<endl;
if((ciag.length()-1)%2==1 && i==liczba){stan=1;}
if(stan==0)
{
hasz+=numer*potegowanie(wykladnik);
hasz%=1000000007;
++wykladnik;
}
// cout<<hasz<<endl;
}
}
if(hasz1==hasz){cout<<"TAK";return 0 ;}
else{cout<<"NIE";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 101 102 103 104 | #include <iostream> using namespace std; int potegowanie(int b) { int i; int wynik = 1; long int x = 31%1000000007; for (i=1; i<=b; i<<=1) { x %=1000000007; if ((b&i) != 0) { wynik *= x; wynik %= 1000000007; } x *= x; } return wynik; } int main() { ios_base::sync_with_stdio(0); long long hasz=0, hasz1=0; char znak; int ilosc; string ciag; cin>>ilosc; if(ilosc!=0) { int liczba=ilosc/2; if(ilosc%2==1){liczba++;} int wykladnik=0; for(int i=1;i<=ilosc;++i) { bool stan=0; cin>>znak; int numer=(int)znak%96; // cout<<"numer: "<<numer<<endl; if(i>liczba) {wykladnik--; // cout<<"wykladnik: "<<wykladnik<<endl; hasz1+=numer*potegowanie(wykladnik); hasz1%=1000000007; // cout<<hasz1<<endl; } else { // cout<<"wykladnik: "<<wykladnik<<endl; if(ilosc%2==1 && i==liczba){stan=1;} if(stan==0) { hasz+=numer*potegowanie(wykladnik); hasz%=1000000007; ++wykladnik; } // cout<<hasz<<endl; } } if(hasz1==hasz){cout<<"TAK";return 0 ;} else{cout<<"NIE";return 0;} } else { cin>>ciag; ciag="1"+ciag; int liczba=(ciag.length()-1)/2; if((ciag.length()-1)%2==1){liczba++;} int wykladnik=0; for(int i=1;i<ciag.length();++i) { bool stan=0; znak=ciag[i]; int numer=(int)znak%96; // cout<<"numer: "<<numer<<endl; if(i>liczba) {wykladnik--; // cout<<"wykladnik: "<<wykladnik<<endl; hasz1+=numer*potegowanie(wykladnik); hasz1%=1000000007; // cout<<hasz1<<endl; } else { // cout<<"wykladnik: "<<wykladnik<<endl; if((ciag.length()-1)%2==1 && i==liczba){stan=1;} if(stan==0) { hasz+=numer*potegowanie(wykladnik); hasz%=1000000007; ++wykladnik; } // cout<<hasz<<endl; } } if(hasz1==hasz){cout<<"TAK";return 0 ;} else{cout<<"NIE";return 0;} } } |
English