#include <iostream>
using namespace std;
const int SIZE = 1200000;
char start[SIZE];
char endd[SIZE];
int count[26] = { 0 };
int length;
bool checkCounts() {
int odd = 0;
for (int i = 0; i < 26; i++) {
if (count[i] % 2) {
odd++;
}
}
if (length % 2) {
if (odd == 1) {
return true;
} else {
return false;
}
} else {
if (odd == 0) {
return true;
} else {
return false;
}
}
}
bool isPalindrome() {
if (length <= SIZE) {
for (int i = 0; i < length / 2; i++) {
if (start[i] != start[length - 1 - i]) {
return false;
}
}
} else if (length <= 2*SIZE) {
for (int i = 0; i < length / 2; i++) {
if (length - 1 - i < SIZE) {
if (start[i] != start[length - 1 - i]) {
return false;
}
} else {
if (start[i] != endd[length - 1 - i - SIZE]) {
return false;
}
}
}
} else {
int k = 0;
for (int i = 0; i < SIZE; i++) {
if (i < (length % SIZE)) {
if (start[i] != endd[(length % SIZE) - 1 - i]) {
return false;
}
} else {
if (start[i] != endd[SIZE - 1 - k]) {
return false;
}
k++;
}
}
}
return true;
}
int main() {
int l;
cin >> l;
char c;
while (cin >> c) {
length++;
count[((int) (c)) - 97]++;
if (length <= SIZE) {
start[length - 1] = c;
} else if (length <= 2*SIZE) {
endd[length - 1 - SIZE] = c;
} else {
endd[(length - 1) % SIZE] = c;
}
}
if (!checkCounts()) {
cout << "NIE";
} else {
if (!isPalindrome()) {
cout << "NIE";
} else {
cout << "TAK";
}
}
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 | #include <iostream> using namespace std; const int SIZE = 1200000; char start[SIZE]; char endd[SIZE]; int count[26] = { 0 }; int length; bool checkCounts() { int odd = 0; for (int i = 0; i < 26; i++) { if (count[i] % 2) { odd++; } } if (length % 2) { if (odd == 1) { return true; } else { return false; } } else { if (odd == 0) { return true; } else { return false; } } } bool isPalindrome() { if (length <= SIZE) { for (int i = 0; i < length / 2; i++) { if (start[i] != start[length - 1 - i]) { return false; } } } else if (length <= 2*SIZE) { for (int i = 0; i < length / 2; i++) { if (length - 1 - i < SIZE) { if (start[i] != start[length - 1 - i]) { return false; } } else { if (start[i] != endd[length - 1 - i - SIZE]) { return false; } } } } else { int k = 0; for (int i = 0; i < SIZE; i++) { if (i < (length % SIZE)) { if (start[i] != endd[(length % SIZE) - 1 - i]) { return false; } } else { if (start[i] != endd[SIZE - 1 - k]) { return false; } k++; } } } return true; } int main() { int l; cin >> l; char c; while (cin >> c) { length++; count[((int) (c)) - 97]++; if (length <= SIZE) { start[length - 1] = c; } else if (length <= 2*SIZE) { endd[length - 1 - SIZE] = c; } else { endd[(length - 1) % SIZE] = c; } } if (!checkCounts()) { cout << "NIE"; } else { if (!isPalindrome()) { cout << "NIE"; } else { cout << "TAK"; } } return 0; } |
English