#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; } |