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