#include <bits/stdc++.h>
using namespace std;
int main()
{ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
int N;
cin>>N;
for(int I=1;I<=N;I++)
{
int n;
cin>>n;
vector<int>tab(n);
for(int i=0;i<n;i++)
{
cin>>tab[i];
}
reverse(tab.begin(),tab.end());
while(tab.size()>0&&tab.back()==0){tab.pop_back();}
reverse(tab.begin(),tab.end());
while(tab.size()>0&&tab.back()==0){tab.pop_back();}
n=tab.size();
if(n==0){cout<<"TAK"<<endl;continue;}
else if(n==1)
{
if(tab[0]==1){cout<<"TAK"<<'\n';}
else{cout<<"NIE"<<'\n';}
continue;
}
else if(n==2)
{
if(abs(tab[0]-tab[1])<=1){cout<<"TAK"<<'\n';}
else{cout<<"NIE"<<'\n';}
continue;
}
else if(n==3)
{
tab[0]--;
if(tab[2]-tab[1]+tab[0]==0&&tab[1]-tab[0]>=0){cout<<"TAK"<<'\n';continue;}
tab[0]++;
tab[1]--;
if(tab[2]-tab[1]+tab[0]==0&&tab[1]-tab[0]>=0){cout<<"TAK"<<'\n';continue;}
tab[1]++;
tab[2]--;
if(tab[2]-tab[1]+tab[0]==0&&tab[1]-tab[0]>=0){cout<<"TAK"<<'\n';continue;}
tab[2]++;
if(tab[2]-tab[1]+tab[0]==0&&tab[1]-tab[0]>=0){cout<<"TAK"<<'\n';continue;}
cout<<"NIE"<<'\n';
continue;
}
for(int i=1;i+1<n;i++)
{
tab[i]-=2;
}
tab[0]--;
tab[n-1]--;
vector<long long>X(n);
X[0]=tab[0];
for(int i=1;i<n;i++)
{
X[i]=-X[i-1]+tab[i];
}
if(abs(X[n-1])>1){cout<<"NIE"<<'\n';continue;}
bool cv=1;
for(int i=0;i+1<n;i++)
{
if(X[i]<0){cv=0;}
}
if(cv){cout<<"TAK"<<'\n';continue;}
int s,p;
if(X[n-1]==0)
{
///nieparzysta suma i+j
s=1;
p=-1;
}
else
{
///parzysta suma i+j
s=0;
if(X[n-1]==1)
{
///parzystosc j ta sama co n-1
p=n%2;
}
else if(X[n-1]==-1)
{
///parzystosc j ta sama co n
p=(n-1)%2;
}
}
cv=1;
for(int i=1;i+1<n;i++)
{
if(X[i]==-1)
{
if(s==1)
{
if(p==(i+1)%2){cv=0;break;}
p=i%2;
}
else
{
if(i%2==p){continue;}
else{cv=0;break;}
}
}
else if(X[i]==0)
{
if(s==1){continue;}
if(i%2==p){continue;}
else
{
if(i==n-1){cv=0;break;}
}
}
else
{
if(X[i]<-1){cv=0;break;}
if(X[i]>=1){continue;}
}
}
if(cv){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 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 121 122 123 124 125 | #include <bits/stdc++.h> using namespace std; int main() {ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); int N; cin>>N; for(int I=1;I<=N;I++) { int n; cin>>n; vector<int>tab(n); for(int i=0;i<n;i++) { cin>>tab[i]; } reverse(tab.begin(),tab.end()); while(tab.size()>0&&tab.back()==0){tab.pop_back();} reverse(tab.begin(),tab.end()); while(tab.size()>0&&tab.back()==0){tab.pop_back();} n=tab.size(); if(n==0){cout<<"TAK"<<endl;continue;} else if(n==1) { if(tab[0]==1){cout<<"TAK"<<'\n';} else{cout<<"NIE"<<'\n';} continue; } else if(n==2) { if(abs(tab[0]-tab[1])<=1){cout<<"TAK"<<'\n';} else{cout<<"NIE"<<'\n';} continue; } else if(n==3) { tab[0]--; if(tab[2]-tab[1]+tab[0]==0&&tab[1]-tab[0]>=0){cout<<"TAK"<<'\n';continue;} tab[0]++; tab[1]--; if(tab[2]-tab[1]+tab[0]==0&&tab[1]-tab[0]>=0){cout<<"TAK"<<'\n';continue;} tab[1]++; tab[2]--; if(tab[2]-tab[1]+tab[0]==0&&tab[1]-tab[0]>=0){cout<<"TAK"<<'\n';continue;} tab[2]++; if(tab[2]-tab[1]+tab[0]==0&&tab[1]-tab[0]>=0){cout<<"TAK"<<'\n';continue;} cout<<"NIE"<<'\n'; continue; } for(int i=1;i+1<n;i++) { tab[i]-=2; } tab[0]--; tab[n-1]--; vector<long long>X(n); X[0]=tab[0]; for(int i=1;i<n;i++) { X[i]=-X[i-1]+tab[i]; } if(abs(X[n-1])>1){cout<<"NIE"<<'\n';continue;} bool cv=1; for(int i=0;i+1<n;i++) { if(X[i]<0){cv=0;} } if(cv){cout<<"TAK"<<'\n';continue;} int s,p; if(X[n-1]==0) { ///nieparzysta suma i+j s=1; p=-1; } else { ///parzysta suma i+j s=0; if(X[n-1]==1) { ///parzystosc j ta sama co n-1 p=n%2; } else if(X[n-1]==-1) { ///parzystosc j ta sama co n p=(n-1)%2; } } cv=1; for(int i=1;i+1<n;i++) { if(X[i]==-1) { if(s==1) { if(p==(i+1)%2){cv=0;break;} p=i%2; } else { if(i%2==p){continue;} else{cv=0;break;} } } else if(X[i]==0) { if(s==1){continue;} if(i%2==p){continue;} else { if(i==n-1){cv=0;break;} } } else { if(X[i]<-1){cv=0;break;} if(X[i]>=1){continue;} } } if(cv){cout<<"TAK"<<'\n';} else{cout<<"NIE"<<'\n';} } return 0; } |
English