#include <bits/stdc++.h>
using namespace std;
const int MX=1000100;
int t,n,x,a[MX];
int main() {
scanf("%d",&t);
while (t--) {
scanf("%d",&n);
int le=-1,ri=-1;
for (int i=0; i<n; i++) {
scanf("%d",&a[i]);
if (a[i]) {
if (le==-1) le=i;
ri=i;
}
}
bool ok=true;
for (int i=le; i<=ri; i++) if (a[i]==0) ok=false;
if (ok) {
while (le<ri) {
if (a[le]==0) { ++le; continue; }
x=min(a[le],a[le+1]);
if (x>0 && a[le]==x && a[le+1]==x) break;
a[le]-=x;
a[le+1]-=x;
if (a[le]>0) break;
}
while (le<ri) {
if (a[ri]==0) { --ri; continue; }
x=min(a[ri],a[ri-1]);
if (x>0 && a[ri]==x && a[ri-1]==x) break;
a[ri]-=x;
a[ri-1]-=x;
if (a[ri]>0) break;
}
for (int i=le; i<=ri; i++) {
if (a[i]==0) { ok=false; break; }
--a[i];
}
if (ok) while (le<ri) {
if (a[le]==0) { ++le; continue; }
x=min(a[le],a[le+1]);
a[le]-=x;
a[le+1]-=x;
if (a[le]>0) break;
}
if (ok) while (le<ri) {
if (a[ri]==0) { --ri; continue; }
x=min(a[ri],a[ri-1]);
a[ri]-=x;
a[ri-1]-=x;
if (a[ri]>0) break;
}
ok&=(le>ri || (le==ri && a[le]==0));
}
puts(ok?"TAK":"NIE");
}
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 | #include <bits/stdc++.h> using namespace std; const int MX=1000100; int t,n,x,a[MX]; int main() { scanf("%d",&t); while (t--) { scanf("%d",&n); int le=-1,ri=-1; for (int i=0; i<n; i++) { scanf("%d",&a[i]); if (a[i]) { if (le==-1) le=i; ri=i; } } bool ok=true; for (int i=le; i<=ri; i++) if (a[i]==0) ok=false; if (ok) { while (le<ri) { if (a[le]==0) { ++le; continue; } x=min(a[le],a[le+1]); if (x>0 && a[le]==x && a[le+1]==x) break; a[le]-=x; a[le+1]-=x; if (a[le]>0) break; } while (le<ri) { if (a[ri]==0) { --ri; continue; } x=min(a[ri],a[ri-1]); if (x>0 && a[ri]==x && a[ri-1]==x) break; a[ri]-=x; a[ri-1]-=x; if (a[ri]>0) break; } for (int i=le; i<=ri; i++) { if (a[i]==0) { ok=false; break; } --a[i]; } if (ok) while (le<ri) { if (a[le]==0) { ++le; continue; } x=min(a[le],a[le+1]); a[le]-=x; a[le+1]-=x; if (a[le]>0) break; } if (ok) while (le<ri) { if (a[ri]==0) { --ri; continue; } x=min(a[ri],a[ri-1]); a[ri]-=x; a[ri-1]-=x; if (a[ri]>0) break; } ok&=(le>ri || (le==ri && a[le]==0)); } puts(ok?"TAK":"NIE"); } return 0; } |
English