#include <bits/stdc++.h>
using namespace std;
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int T;
cin >> T;
while (T--){
int N;
cin >> N;
bool da=true, nzer=false, poz=false;
vector<int> v(N+3), in(N+3), out(N+3);
for (int i=1; i<=N; i++){
cin >> v[i];
if (v[i]) nzer=true;
if (nzer && !v[i]) da=false;
if (!da && v[i]) poz=true;
}
if (poz || (N==1 && v[1]>1)){
cout << "NIE\n";
continue;
}
bool rybka=false;
for (int i=1; i<=N; i++) {
int exit = v[i] - out[i-1], ent = v[i] - in[i-1];
int exD = v[i + 1], enD = v[i + 1];
bool zrb=false;
if (i==N && (exit!=exD || enD!=ent)){
rybka=true;
break;
}
if (exD >= exit) {
in[i ] += exit;
if (v[i+1]==in[i] && v[i+2]){
zrb=true;
}
} else in[i] += exD;
if (enD >= ent) {
out[i] += ent;
if (v[i+1]==out[i] && v[i+2] && zrb){
if (out[i]) out[i]--;
else in[i+1]--;
}
}
else out[i] += enD;
}
int ilr=0;
for (int i = 1; i <= N; i++) {
if (rybka){
ilr=99;
break;
}
int IN=out[i]+in[i-1];
int OUT=out[i-1]+in[i];
if (abs(IN-OUT)>1) ilr+=9999;
if ((abs(v[i]-IN)>1) || abs(v[i]-OUT)>1) ilr+=9999;
if (abs(IN-OUT)==1) ilr++;
}
if (ilr==2 || !ilr) cout << "TAK\n";
else cout << "NIE\n";
}
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 | #include <bits/stdc++.h> using namespace std; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int T; cin >> T; while (T--){ int N; cin >> N; bool da=true, nzer=false, poz=false; vector<int> v(N+3), in(N+3), out(N+3); for (int i=1; i<=N; i++){ cin >> v[i]; if (v[i]) nzer=true; if (nzer && !v[i]) da=false; if (!da && v[i]) poz=true; } if (poz || (N==1 && v[1]>1)){ cout << "NIE\n"; continue; } bool rybka=false; for (int i=1; i<=N; i++) { int exit = v[i] - out[i-1], ent = v[i] - in[i-1]; int exD = v[i + 1], enD = v[i + 1]; bool zrb=false; if (i==N && (exit!=exD || enD!=ent)){ rybka=true; break; } if (exD >= exit) { in[i ] += exit; if (v[i+1]==in[i] && v[i+2]){ zrb=true; } } else in[i] += exD; if (enD >= ent) { out[i] += ent; if (v[i+1]==out[i] && v[i+2] && zrb){ if (out[i]) out[i]--; else in[i+1]--; } } else out[i] += enD; } int ilr=0; for (int i = 1; i <= N; i++) { if (rybka){ ilr=99; break; } int IN=out[i]+in[i-1]; int OUT=out[i-1]+in[i]; if (abs(IN-OUT)>1) ilr+=9999; if ((abs(v[i]-IN)>1) || abs(v[i]-OUT)>1) ilr+=9999; if (abs(IN-OUT)==1) ilr++; } if (ilr==2 || !ilr) cout << "TAK\n"; else cout << "NIE\n"; } return 0; } |
English