#include <iostream> #include <queue> #include <cctype> #include <algorithm> #define LEN 128 void print(char d[]) { for(int i=0; i<LEN; i++) { std::cout << (int)d[i] << ':'; } std::cout << std::endl; } int main() { long long l; char data[LEN]; std::queue<char> prev; char ch; for(int i=0; i<LEN; i++) { data[i] = '\0'; } std::cin >> l; if(l) { for(long long int i=0; i<l; i++) { if(i) { ch = std::cin.get(); } else { do { ch = std::cin.get(); } while(!islower(ch)); } for(int j=0; j<=i && j<LEN; j++) { data[j] ^= ch; } if(prev.size() == LEN-1) prev.pop(); prev.push(ch); } int to = (prev.size() < LEN-1) ? prev.size() : LEN-1; int frm = to; while(prev.size()) { ch = prev.front(); prev.pop(); for(int j=frm; j<=to; j++) { data[j] ^= ch; } frm--; } } else { do { ch = std::cin.get(); } while(!islower(ch)); int i = 0; do { for(int j=0; j<=i && j<LEN; j++) { data[j] ^= ch; } if(prev.size() == LEN-1) prev.pop(); prev.push(ch); i++; ch = std::cin.get(); } while(islower(ch)); int to = (prev.size() < LEN-1) ? prev.size() : LEN-1; int frm = to; while(prev.size()) { ch = prev.front(); prev.pop(); for(int j=frm; j<=to; j++) { data[j] ^= ch; } frm--; } } // print(data); ch = data[0]; int res = 1; for(int i=1; res && i < l && i<LEN; i++) { if(data[i] != ch) res = 0; } std::cout << ((res && (ch == '\0' || islower(ch))) ? "TAK" : "NIE") << std::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 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 | #include <iostream> #include <queue> #include <cctype> #include <algorithm> #define LEN 128 void print(char d[]) { for(int i=0; i<LEN; i++) { std::cout << (int)d[i] << ':'; } std::cout << std::endl; } int main() { long long l; char data[LEN]; std::queue<char> prev; char ch; for(int i=0; i<LEN; i++) { data[i] = '\0'; } std::cin >> l; if(l) { for(long long int i=0; i<l; i++) { if(i) { ch = std::cin.get(); } else { do { ch = std::cin.get(); } while(!islower(ch)); } for(int j=0; j<=i && j<LEN; j++) { data[j] ^= ch; } if(prev.size() == LEN-1) prev.pop(); prev.push(ch); } int to = (prev.size() < LEN-1) ? prev.size() : LEN-1; int frm = to; while(prev.size()) { ch = prev.front(); prev.pop(); for(int j=frm; j<=to; j++) { data[j] ^= ch; } frm--; } } else { do { ch = std::cin.get(); } while(!islower(ch)); int i = 0; do { for(int j=0; j<=i && j<LEN; j++) { data[j] ^= ch; } if(prev.size() == LEN-1) prev.pop(); prev.push(ch); i++; ch = std::cin.get(); } while(islower(ch)); int to = (prev.size() < LEN-1) ? prev.size() : LEN-1; int frm = to; while(prev.size()) { ch = prev.front(); prev.pop(); for(int j=frm; j<=to; j++) { data[j] ^= ch; } frm--; } } // print(data); ch = data[0]; int res = 1; for(int i=1; res && i < l && i<LEN; i++) { if(data[i] != ch) res = 0; } std::cout << ((res && (ch == '\0' || islower(ch))) ? "TAK" : "NIE") << std::endl; return 0; } |