#include <iostream>
using namespace std;
const int N = 1e6+9;
int A[N], B[N];
bool check(int l, int r) {
if(l == r) {
return (A[l] == 1);
}
for(int i = l; i <= r-2; ++i) {
A[i+1] -= A[i]-1;
if(A[i+1] <= 0) return false;
}
return (A[r-1] == A[r] || A[r-1] == A[r]+1);
}
void solve() {
int n; cin >> n;
int cnt = 0;
int l = n+1, r = 0;
for(int i = 1; i <= n; ++i) {
cin >> B[i];
if(B[i] != 0) {
cnt++;
l = min(l, i);
r = max(r, i);
}
}
if(r-l+1 != cnt) {
cout << "NIE\n";
return;
}
for(int i = l; i <= r; ++i) {
A[i] = B[i];
}
bool b = check(l, r);
if(b) {
cout << "TAK\n";
return;
}
for(int i = l; i <= r; ++i) {
A[i] = B[i];
}
A[l+1]--;
b = check(l, r);
cout << (b ? "TAK\n" : "NIE\n");
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
int t; cin >> t;
while(t--) {
solve();
}
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 | #include <iostream> using namespace std; const int N = 1e6+9; int A[N], B[N]; bool check(int l, int r) { if(l == r) { return (A[l] == 1); } for(int i = l; i <= r-2; ++i) { A[i+1] -= A[i]-1; if(A[i+1] <= 0) return false; } return (A[r-1] == A[r] || A[r-1] == A[r]+1); } void solve() { int n; cin >> n; int cnt = 0; int l = n+1, r = 0; for(int i = 1; i <= n; ++i) { cin >> B[i]; if(B[i] != 0) { cnt++; l = min(l, i); r = max(r, i); } } if(r-l+1 != cnt) { cout << "NIE\n"; return; } for(int i = l; i <= r; ++i) { A[i] = B[i]; } bool b = check(l, r); if(b) { cout << "TAK\n"; return; } for(int i = l; i <= r; ++i) { A[i] = B[i]; } A[l+1]--; b = check(l, r); cout << (b ? "TAK\n" : "NIE\n"); } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int t; cin >> t; while(t--) { solve(); } return 0; } |
English