#include <iostream>
#include <vector>
#include <cstdint>
using namespace std;
template <unsigned int M, unsigned int base>
class hashh{
public:
hashh(): val(0),rp(1) {};
uint32_t val;
uint32_t rp;
void add(uint32_t a){
val = (val + rp*a)%M;
rp=(rp*base)%M;
}
};
template <unsigned int M, unsigned int base>
class rev_hash{
public:
rev_hash(): val(0) {};
uint32_t val;
void add(uint32_t b0){
val = (val*base + b0)%M;
}
};
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
cin >> n;
hashh<32711, 31> h1;
rev_hash<32711, 31> rh1;
hashh<32999, 29> h2;
rev_hash<32999, 29> rh2;
hashh<42709, 29> h3;
rev_hash<42709, 29> rh3;
char c;
while (cin >> c && isalpha(c)) {
uint32_t t = c - 'a';
h1.add(t);
rh1.add(t);
h2.add(t);
rh2.add(t);
h3.add(t);
rh3.add(t);
}
cout<< ((rh1.val==h1.val && rh2.val==h2.val && rh3.val==h3.val)?"TAK":"NIE")<<endl;
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 | #include <iostream> #include <vector> #include <cstdint> using namespace std; template <unsigned int M, unsigned int base> class hashh{ public: hashh(): val(0),rp(1) {}; uint32_t val; uint32_t rp; void add(uint32_t a){ val = (val + rp*a)%M; rp=(rp*base)%M; } }; template <unsigned int M, unsigned int base> class rev_hash{ public: rev_hash(): val(0) {}; uint32_t val; void add(uint32_t b0){ val = (val*base + b0)%M; } }; int main() { ios_base::sync_with_stdio(0); cin.tie(0); int n; cin >> n; hashh<32711, 31> h1; rev_hash<32711, 31> rh1; hashh<32999, 29> h2; rev_hash<32999, 29> rh2; hashh<42709, 29> h3; rev_hash<42709, 29> rh3; char c; while (cin >> c && isalpha(c)) { uint32_t t = c - 'a'; h1.add(t); rh1.add(t); h2.add(t); rh2.add(t); h3.add(t); rh3.add(t); } cout<< ((rh1.val==h1.val && rh2.val==h2.val && rh3.val==h3.val)?"TAK":"NIE")<<endl; return 0; } |
English