#include<bits/stdc++.h>
#define LL long long
#define LLL __int128
#define uint unsigned
#define ldb long double
#define uLL unsigned long long
using namespace std;
const int N=1e6+5;
inline void MAIN(){
int n;
cin>>n;
vector<int>a(n);
for(int&i:a)cin>>i;
while(!a.back())a.pop_back();
reverse(a.begin(),a.end());
while(!a.back())a.pop_back();
if(count(a.begin(),a.end(),0))return cout<<"NIE\n",void();
n=a.size();
if(n==1)return cout<<(a[0]==1?"TAK\n":"NIE\n"),void();
LL s=0;
vector<vector<int>>f(n+1,vector<int>(3)),g(n+1,vector<int>(3)),h(n+1,vector<int>(3));
f[0]={0,1,0},g[0]={0,0,0},h[0]={0,0,0};
for(int i=0;i<n;++i){
s=a[i]-s;
if(s<-1)return cout<<"NIE\n",void();
for(int j=-1;j<=1;++j){
if(i<n-1?(s-j>0):(s-j==0))f[i+1][1-j]=f[i][1+j],h[i+1][1-j]=g[i][1+j]|h[i][1+j];
if(i<n-1?(s-j+1>0):(s-j+1==0)&&1-j+1<3)g[i+1][1-j+1]=g[i][1+j]|f[i][1+j];
}
}
cout<<((f[n][0]|f[n][1]|f[n][2]|g[n][0]|g[n][1]|g[n][2]|h[n][0]|h[n][1]|h[n][2])?"TAK\n":"NIE\n");
}
signed main(){
cin.tie(0)->sync_with_stdio(0);
int t=1;cin>>t;while(t--)MAIN();
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 | #include<bits/stdc++.h> #define LL long long #define LLL __int128 #define uint unsigned #define ldb long double #define uLL unsigned long long using namespace std; const int N=1e6+5; inline void MAIN(){ int n; cin>>n; vector<int>a(n); for(int&i:a)cin>>i; while(!a.back())a.pop_back(); reverse(a.begin(),a.end()); while(!a.back())a.pop_back(); if(count(a.begin(),a.end(),0))return cout<<"NIE\n",void(); n=a.size(); if(n==1)return cout<<(a[0]==1?"TAK\n":"NIE\n"),void(); LL s=0; vector<vector<int>>f(n+1,vector<int>(3)),g(n+1,vector<int>(3)),h(n+1,vector<int>(3)); f[0]={0,1,0},g[0]={0,0,0},h[0]={0,0,0}; for(int i=0;i<n;++i){ s=a[i]-s; if(s<-1)return cout<<"NIE\n",void(); for(int j=-1;j<=1;++j){ if(i<n-1?(s-j>0):(s-j==0))f[i+1][1-j]=f[i][1+j],h[i+1][1-j]=g[i][1+j]|h[i][1+j]; if(i<n-1?(s-j+1>0):(s-j+1==0)&&1-j+1<3)g[i+1][1-j+1]=g[i][1+j]|f[i][1+j]; } } cout<<((f[n][0]|f[n][1]|f[n][2]|g[n][0]|g[n][1]|g[n][2]|h[n][0]|h[n][1]|h[n][2])?"TAK\n":"NIE\n"); } signed main(){ cin.tie(0)->sync_with_stdio(0); int t=1;cin>>t;while(t--)MAIN(); return 0; } |
English