#include<bits/stdc++.h> using namespace std; int z; int n, t[1000005], x[1000005], zera, poczN; bool czy1 = 1, czy2 = 1, czy3 = 1, czy4 = 1, czy = 0; void solve() { cin >> n; for(int i = 1; i <= n; i++) { cin >> t[i]; if(t[i] != 0) czy = true; if(!czy) zera++; } poczN = n; int zeraK = 0; for(int i = n; i > 0; i--) { if(t[i] != 0) break; zeraK++; } for(int i = 1 + zera; i <= n; i++) t[i - zera] = t[i]; n -= zera + zeraK; for(int i = 1; i <= n; i++) x[i] = t[i]; //cout << zera << '\n'; if(n == 1) { if(t[n] == 1) cout << "TAK\n"; else cout << "NIE\n"; return; } x[1]--; for(int i = 1; i < n; i++) { x[i + 1] -= x[i] + 1; x[i] = 0; if(x[i + 1] < 0 && i + 1 != n) { czy1 = false; break; } } if(x[n] != 0 && x[n] != -1) czy1 = false; for(int i = 1; i <= n; i++) x[i] = t[i]; x[n]--; for(int i = n; i > 1; i--) { x[i - 1] -= x[i] + 1; x[i] = 0; if(x[i - 1] < 0 && i - 1 != 1) { czy2 = false; break; } } if(x[1] != 0 && x[1] != -1) czy2 = false; for(int i = 1; i <= n; i++) x[i] = t[i]; x[2] -= x[1] + 1; x[1] = 0; if(x[2] < 0) czy3 = false; for(int i = 2; i < n; i++) { x[i + 1] -= x[i] + 1; x[i] = 0; if(x[i + 1] < 0 && i + 1 != n) { czy3 = false; break; } } if(x[n] != 0 && x[n] != -1) czy3 = false; for(int i = 1; i <= n; i++) x[i] = t[i]; x[n - 1] -= x[n] + 1; x[n] = 0; if(x[n - 1] < 0) czy4 = false; for(int i = n - 1; i > 1; i--) { x[i - 1] -= x[i] + 1; x[i] = 0; if(x[i - 1] < 0 && i - 1 != 1) { czy4 = false; break; } } if(x[1] != 0 && x[1] != -1) czy4 = false; //cout << czy1 << " " << czy2 << " " << czy3 << " " << czy4 << " "; if(!czy1 && !czy2 && !czy3 && !czy4) cout << "NIE\n"; else cout << "TAK\n"; } void zeruj() { for(int i = 1; i <= poczN; i++) t[i] = x[i] = 0; n = 0; poczN = 0; czy1 = czy2 = czy3 = czy4 = 1; czy = false; zera = 0; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> z; while(z--) { solve(); zeruj(); } }
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 105 106 107 108 109 110 111 112 113 114 115 116 | #include<bits/stdc++.h> using namespace std; int z; int n, t[1000005], x[1000005], zera, poczN; bool czy1 = 1, czy2 = 1, czy3 = 1, czy4 = 1, czy = 0; void solve() { cin >> n; for(int i = 1; i <= n; i++) { cin >> t[i]; if(t[i] != 0) czy = true; if(!czy) zera++; } poczN = n; int zeraK = 0; for(int i = n; i > 0; i--) { if(t[i] != 0) break; zeraK++; } for(int i = 1 + zera; i <= n; i++) t[i - zera] = t[i]; n -= zera + zeraK; for(int i = 1; i <= n; i++) x[i] = t[i]; //cout << zera << '\n'; if(n == 1) { if(t[n] == 1) cout << "TAK\n"; else cout << "NIE\n"; return; } x[1]--; for(int i = 1; i < n; i++) { x[i + 1] -= x[i] + 1; x[i] = 0; if(x[i + 1] < 0 && i + 1 != n) { czy1 = false; break; } } if(x[n] != 0 && x[n] != -1) czy1 = false; for(int i = 1; i <= n; i++) x[i] = t[i]; x[n]--; for(int i = n; i > 1; i--) { x[i - 1] -= x[i] + 1; x[i] = 0; if(x[i - 1] < 0 && i - 1 != 1) { czy2 = false; break; } } if(x[1] != 0 && x[1] != -1) czy2 = false; for(int i = 1; i <= n; i++) x[i] = t[i]; x[2] -= x[1] + 1; x[1] = 0; if(x[2] < 0) czy3 = false; for(int i = 2; i < n; i++) { x[i + 1] -= x[i] + 1; x[i] = 0; if(x[i + 1] < 0 && i + 1 != n) { czy3 = false; break; } } if(x[n] != 0 && x[n] != -1) czy3 = false; for(int i = 1; i <= n; i++) x[i] = t[i]; x[n - 1] -= x[n] + 1; x[n] = 0; if(x[n - 1] < 0) czy4 = false; for(int i = n - 1; i > 1; i--) { x[i - 1] -= x[i] + 1; x[i] = 0; if(x[i - 1] < 0 && i - 1 != 1) { czy4 = false; break; } } if(x[1] != 0 && x[1] != -1) czy4 = false; //cout << czy1 << " " << czy2 << " " << czy3 << " " << czy4 << " "; if(!czy1 && !czy2 && !czy3 && !czy4) cout << "NIE\n"; else cout << "TAK\n"; } void zeruj() { for(int i = 1; i <= poczN; i++) t[i] = x[i] = 0; n = 0; poczN = 0; czy1 = czy2 = czy3 = czy4 = 1; czy = false; zera = 0; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> z; while(z--) { solve(); zeruj(); } } |