#include <cstdio>
#include <algorithm>
using namespace std;
int B[1000002];
bool solve() {
int n;
scanf("%d", &n);
for (int i = 1; i <= n; i++) scanf("%d", &B[i]);
B[0] = 0;
B[n+1] = 0;
for (int i = 0; i <= n+1; i++) B[i] *= 2;
int beg = 0;
bool mustzero = false;
int i = 1;
while (B[i] == 0) i++;
for (; i < n+1; i++) {
if (mustzero && B[i] != 0) return false;
if (B[i+1] < B[i]) {
if (B[i+1] + 2 >= B[i]) {
if (beg == 4) return false;
beg = 4;
B[i]--;
if (B[i] % 2 != 0) B[i]--;
}
else return false;
}
B[i+1] -= B[i];
//if (beg == 2) beg = 3;
//if (beg == 1) beg = 2;
if (B[i+1] == 0) {
if (beg == 4) mustzero = true;
else {
B[i+1] = 1;
//beg = 1;
}
}
}
return true;
}
int main() {
int q;
scanf("%d", &q);
for (;q>0;q--) {
if (solve()) printf("TAK\n");
else printf("NIE\n");
}
}
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 | #include <cstdio> #include <algorithm> using namespace std; int B[1000002]; bool solve() { int n; scanf("%d", &n); for (int i = 1; i <= n; i++) scanf("%d", &B[i]); B[0] = 0; B[n+1] = 0; for (int i = 0; i <= n+1; i++) B[i] *= 2; int beg = 0; bool mustzero = false; int i = 1; while (B[i] == 0) i++; for (; i < n+1; i++) { if (mustzero && B[i] != 0) return false; if (B[i+1] < B[i]) { if (B[i+1] + 2 >= B[i]) { if (beg == 4) return false; beg = 4; B[i]--; if (B[i] % 2 != 0) B[i]--; } else return false; } B[i+1] -= B[i]; //if (beg == 2) beg = 3; //if (beg == 1) beg = 2; if (B[i+1] == 0) { if (beg == 4) mustzero = true; else { B[i+1] = 1; //beg = 1; } } } return true; } int main() { int q; scanf("%d", &q); for (;q>0;q--) { if (solve()) printf("TAK\n"); else printf("NIE\n"); } } |
English