#include<set>
#include<map>
#include<queue>
#include<vector>
#include<algorithm>
#include<bits/stdc++.h>
#define pr pair
#define f first
#define s second
#define ll long long
#define mp make_pair
#define pll pr<ll,ll>
#define pii pr<int,int>
#define piii pr<int,pii>
using namespace std;
ll a[1000006];
ll b[1000006];
bool ck(int n)
{
bool ok=1;
for(int i=0;i<n;i++) b[i]=a[i];
for(int i=1;i<n;i++)
{
if(b[i]<b[i-1]) ok=0;
b[i]-=b[i-1];
}
return ok;
}
void sl()
{
int n;
cin>>n;
ll s[2]={0,0};
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++) s[i%2]+=a[i];
if(s[0]==s[1])
{
bool ok=0;
int mi=n,mx=0;
for(int i=0;i<n;i++)
{
if(a[i])
{
if(i&1) mx=max(mx,i);
else mi=min(mi,i);
}
}
if(mi<mx)
{
// for(int i=0;i<n;i++) cout<<a[i]<<' ';
// cout<<endl;
for(int i=mi;i<=mx;i++) a[i]--;
// for(int i=0;i<n;i++) cout<<a[i]<<' ';
// cout<<endl;
ok|=ck(n);
for(int i=mi;i<=mx;i++) a[i]++;
}
mi=n,mx=0;
for(int i=0;i<n;i++)
{
if(a[i])
{
if(i&1) mi=min(mi,i);
else mx=max(mx,i);
}
}
if(mi<mx)
{
// for(int i=0;i<n;i++) cout<<a[i]<<' ';
// cout<<endl;
for(int i=mi;i<=mx;i++) a[i]--;
// for(int i=0;i<n;i++) cout<<a[i]<<' ';
// cout<<endl;
ok|=ck(n);
for(int i=mi;i<=mx;i++) a[i]++;
}
if(ok) cout<<"TAK\n";
else cout<<"NIE\n";
}
else
{
if(abs(s[0]-s[1])>1)
{
cout<<"NIE\n";
return;
}
if(s[1]>s[0])
{
n++;
for(int i=n-1;i>0;i--) a[i]=a[i-1];
a[0]=0;
swap(s[1],s[0]);
}
int mi=n,mx=0;
for(int i=0;i<n;i+=2) if(a[i]) mi=min(mi,i),mx=max(mx,i);
// cout<<"F "<<mi<<' '<<mx<<endl;
// for(int i=0;i<n;i++) cout<<a[i]<<' ';
// cout<<endl;
for(int i=mi;i<=mx;i++) a[i]--;
// for(int i=0;i<n;i++) cout<<a[i]<<' ';
// cout<<endl;
if(ck(n)) cout<<"TAK\n";
else cout<<"NIE\n";
}
}
int main()
{
ios_base::sync_with_stdio(0);
int t;
cin>>t;
while(t--) sl();
return 0;
}/*1
6
1 2 1 1 2 1
*/
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 | #include<set> #include<map> #include<queue> #include<vector> #include<algorithm> #include<bits/stdc++.h> #define pr pair #define f first #define s second #define ll long long #define mp make_pair #define pll pr<ll,ll> #define pii pr<int,int> #define piii pr<int,pii> using namespace std; ll a[1000006]; ll b[1000006]; bool ck(int n) { bool ok=1; for(int i=0;i<n;i++) b[i]=a[i]; for(int i=1;i<n;i++) { if(b[i]<b[i-1]) ok=0; b[i]-=b[i-1]; } return ok; } void sl() { int n; cin>>n; ll s[2]={0,0}; for(int i=0;i<n;i++) cin>>a[i]; for(int i=0;i<n;i++) s[i%2]+=a[i]; if(s[0]==s[1]) { bool ok=0; int mi=n,mx=0; for(int i=0;i<n;i++) { if(a[i]) { if(i&1) mx=max(mx,i); else mi=min(mi,i); } } if(mi<mx) { // for(int i=0;i<n;i++) cout<<a[i]<<' '; // cout<<endl; for(int i=mi;i<=mx;i++) a[i]--; // for(int i=0;i<n;i++) cout<<a[i]<<' '; // cout<<endl; ok|=ck(n); for(int i=mi;i<=mx;i++) a[i]++; } mi=n,mx=0; for(int i=0;i<n;i++) { if(a[i]) { if(i&1) mi=min(mi,i); else mx=max(mx,i); } } if(mi<mx) { // for(int i=0;i<n;i++) cout<<a[i]<<' '; // cout<<endl; for(int i=mi;i<=mx;i++) a[i]--; // for(int i=0;i<n;i++) cout<<a[i]<<' '; // cout<<endl; ok|=ck(n); for(int i=mi;i<=mx;i++) a[i]++; } if(ok) cout<<"TAK\n"; else cout<<"NIE\n"; } else { if(abs(s[0]-s[1])>1) { cout<<"NIE\n"; return; } if(s[1]>s[0]) { n++; for(int i=n-1;i>0;i--) a[i]=a[i-1]; a[0]=0; swap(s[1],s[0]); } int mi=n,mx=0; for(int i=0;i<n;i+=2) if(a[i]) mi=min(mi,i),mx=max(mx,i); // cout<<"F "<<mi<<' '<<mx<<endl; // for(int i=0;i<n;i++) cout<<a[i]<<' '; // cout<<endl; for(int i=mi;i<=mx;i++) a[i]--; // for(int i=0;i<n;i++) cout<<a[i]<<' '; // cout<<endl; if(ck(n)) cout<<"TAK\n"; else cout<<"NIE\n"; } } int main() { ios_base::sync_with_stdio(0); int t; cin>>t; while(t--) sl(); return 0; }/*1 6 1 2 1 1 2 1 */ |
English