#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
void zrob()
{
int n;
cin>>n;
vector<ll>v;
ll cur;
cin>>cur;
n--;
while(!cur)
{
cin>>cur;
n--;
}
v.push_back(cur);
bool bylo=0, czy=1;
for(int i=0; i<n; i++)
{
ll cur;
cin>>cur;
if(bylo&&cur)
czy=0;
else if(!cur)
bylo=1;
else
v.push_back(cur);
}
if(!czy)
cout<<"NIE\n";
else
{
n=v.size();
if(n==1)
{
if(v[0]==1)
cout<<"TAK\n";
else
cout<<"NIE\n";
}
else
{
vector<long long>bez(n, -1), bezsuf(n, -1), parz(n, -1), nparz(n, -1), parz2(n, -1), nparz2(n, -1), parznparz(n, -1);
bez[0]=2*v[0];
parz[0]=2*v[0]-1;
parz2[0]=2*v[0]-2;
for(int i=1; i<n; i++)
{
if(bez[i-1]>0)
bez[i]=2*v[i]-bez[i-1];
if(!(i%2))
{
if(parz[i-1]>0)
parz[i]=2*v[i]-parz[i-1];
if(parz[i]<0&&bez[i-1]>0)
parz[i]=2*v[i]-1-bez[i-1];
if(parz2[i-1]>0)
parz2[i]=2*v[i]-parz2[i-1];
if(parz2[i]<0&&parz[i-1]>0)
parz2[i]=2*v[i]-1-parz[i-1];
if(parz2[i]<0&&bez[i-1]>0)
parz2[i]=2*v[i]-2-bez[i-1];
if(parznparz[i-1]>0)
parznparz[i]=2*v[i]-parznparz[i-1];
if(parznparz[i]<0&&nparz[i-1]>0)
parznparz[i]=2*v[i]-1-nparz[i-1];
if(nparz[i-1]>0)
nparz[i]=2*v[i]-nparz[i-1];
if(nparz2[i-1]>0)
nparz2[i]=2*v[i]-nparz2[i-1];
}
else
{
if(nparz[i-1]>0)
nparz[i]=2*v[i]-nparz[i-1];
if(nparz[i]<0&&bez[i-1]>0)
nparz[i]=2*v[i]-1-bez[i-1];
if(nparz2[i-1]>0)
nparz2[i]=2*v[i]-nparz2[i-1];
if(nparz2[i]<0&&nparz[i-1]>0)
nparz2[i]=2*v[i]-1-nparz[i-1];
if(nparz2[i]<0&&bez[i-1]>0)
nparz2[i]=2*v[i]-2-bez[i-1];
if(parznparz[i-1]>0)
parznparz[i]=2*v[i]-parznparz[i-1];
if(parznparz[i]<0&&parz[i-1]>0)
parznparz[i]=2*v[i]-1-parz[i-1];
if(parz[i-1]>0)
parz[i]=2*v[i]-parz[i-1];
if(parz2[i-1]>0)
parz2[i]=2*v[i]-parz2[i-1];
}
}
if(parznparz[n-1]==0||(parz2[n-1]==0||nparz2[n-1]==0))
cout<<"TAK\n";
else
cout<<"NIE\n";
}
}
}
int main()
{
ios_base::sync_with_stdio(0);
cout.tie(0);
cin.tie(0);
long long t;
cin>>t;
while(t--)
zrob();
}
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 117 118 119 120 | #include<bits/stdc++.h> using namespace std; typedef long long ll; void zrob() { int n; cin>>n; vector<ll>v; ll cur; cin>>cur; n--; while(!cur) { cin>>cur; n--; } v.push_back(cur); bool bylo=0, czy=1; for(int i=0; i<n; i++) { ll cur; cin>>cur; if(bylo&&cur) czy=0; else if(!cur) bylo=1; else v.push_back(cur); } if(!czy) cout<<"NIE\n"; else { n=v.size(); if(n==1) { if(v[0]==1) cout<<"TAK\n"; else cout<<"NIE\n"; } else { vector<long long>bez(n, -1), bezsuf(n, -1), parz(n, -1), nparz(n, -1), parz2(n, -1), nparz2(n, -1), parznparz(n, -1); bez[0]=2*v[0]; parz[0]=2*v[0]-1; parz2[0]=2*v[0]-2; for(int i=1; i<n; i++) { if(bez[i-1]>0) bez[i]=2*v[i]-bez[i-1]; if(!(i%2)) { if(parz[i-1]>0) parz[i]=2*v[i]-parz[i-1]; if(parz[i]<0&&bez[i-1]>0) parz[i]=2*v[i]-1-bez[i-1]; if(parz2[i-1]>0) parz2[i]=2*v[i]-parz2[i-1]; if(parz2[i]<0&&parz[i-1]>0) parz2[i]=2*v[i]-1-parz[i-1]; if(parz2[i]<0&&bez[i-1]>0) parz2[i]=2*v[i]-2-bez[i-1]; if(parznparz[i-1]>0) parznparz[i]=2*v[i]-parznparz[i-1]; if(parznparz[i]<0&&nparz[i-1]>0) parznparz[i]=2*v[i]-1-nparz[i-1]; if(nparz[i-1]>0) nparz[i]=2*v[i]-nparz[i-1]; if(nparz2[i-1]>0) nparz2[i]=2*v[i]-nparz2[i-1]; } else { if(nparz[i-1]>0) nparz[i]=2*v[i]-nparz[i-1]; if(nparz[i]<0&&bez[i-1]>0) nparz[i]=2*v[i]-1-bez[i-1]; if(nparz2[i-1]>0) nparz2[i]=2*v[i]-nparz2[i-1]; if(nparz2[i]<0&&nparz[i-1]>0) nparz2[i]=2*v[i]-1-nparz[i-1]; if(nparz2[i]<0&&bez[i-1]>0) nparz2[i]=2*v[i]-2-bez[i-1]; if(parznparz[i-1]>0) parznparz[i]=2*v[i]-parznparz[i-1]; if(parznparz[i]<0&&parz[i-1]>0) parznparz[i]=2*v[i]-1-parz[i-1]; if(parz[i-1]>0) parz[i]=2*v[i]-parz[i-1]; if(parz2[i-1]>0) parz2[i]=2*v[i]-parz2[i-1]; } } if(parznparz[n-1]==0||(parz2[n-1]==0||nparz2[n-1]==0)) cout<<"TAK\n"; else cout<<"NIE\n"; } } } int main() { ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0); long long t; cin>>t; while(t--) zrob(); } |
English