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