#include <bits/stdc++.h>
#define ull unsigned long long
#define ll long long
#define pb push_back
#define pf push_front
#define in insert
#define pii pair<int, int>
#define pib pair<int, bool>
#define cint const int
#define mn2 262144
#define nw '\n'
#define sp " "
#define mn 1000009
#define inf 400009
#define int long long
using namespace std;
int n, t, tab[mn], licz[mn], sum;
vector<int> v(mn);
bool found;
void dfs(int w, vector<int>& xd, int pos){
if(xd[w]>tab[w]) return;
if(xd[w]==tab[w]) ++pos;
if(found) return;
if(pos==n){ found=true; return; }
if(w-1>=1){
++xd[w-1];
//if(xd[w-1]==tab[w-1]) ++pos;
if(xd[w-1]<=tab[w-1]) dfs(w-1, xd, pos);
--xd[w-1];
}
if(w+1<=n){
++xd[w+1];
//if(xd[w+1]==tab[w+1]) ++pos;
if(xd[w+1]<=tab[w+1]) dfs(w+1, xd, pos);
--xd[w+1];
}
}
int32_t main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin>>t;
while(t--){
cin>>n;
int l=1, r=n;
sum=0;
tab[0]=0;
tab[n+1]=0;
v[0]=0;
v[n+1]=0;
for(int i=1; i<=n; ++i){
cin>>tab[i];
v[i]=0;
sum+=tab[i];
}
while(l<=n && tab[l]==0) ++l;
if(l==n+1){ cout<<"NIE\n"; continue; }
while(r>=0 && tab[r]==0) --r;
bool vd=true;
for(int i=l; i<=r; ++i) if(tab[i]==0){ vd=false; break; }
if(!vd){ cout<<"NIE\n"; continue; }
//cout<<l<<" "<<r<<nw;
if(r-l+1==1){
if(tab[l]==1){ cout<<"TAK\n"; continue; }
else{ cout<<"NIE\n"; continue; }
}
if(r-l+1==2){
if(abs(tab[l]-tab[r])<=1){ cout<<"TAK\n"; continue; }
else{ cout<<"NIE\n"; continue; }
}
found=false;
for(int i=1; i<=n; ++i){
dfs(1, v, 0);
if(found){ cout<<"TAK\n"; break; }
vector<int>().swap(v);
v.resize(mn);
//fill(v.begin(), v.end(), 0);
}
cout<<"NIE\n";
}
}
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 | #include <bits/stdc++.h> #define ull unsigned long long #define ll long long #define pb push_back #define pf push_front #define in insert #define pii pair<int, int> #define pib pair<int, bool> #define cint const int #define mn2 262144 #define nw '\n' #define sp " " #define mn 1000009 #define inf 400009 #define int long long using namespace std; int n, t, tab[mn], licz[mn], sum; vector<int> v(mn); bool found; void dfs(int w, vector<int>& xd, int pos){ if(xd[w]>tab[w]) return; if(xd[w]==tab[w]) ++pos; if(found) return; if(pos==n){ found=true; return; } if(w-1>=1){ ++xd[w-1]; //if(xd[w-1]==tab[w-1]) ++pos; if(xd[w-1]<=tab[w-1]) dfs(w-1, xd, pos); --xd[w-1]; } if(w+1<=n){ ++xd[w+1]; //if(xd[w+1]==tab[w+1]) ++pos; if(xd[w+1]<=tab[w+1]) dfs(w+1, xd, pos); --xd[w+1]; } } int32_t main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>t; while(t--){ cin>>n; int l=1, r=n; sum=0; tab[0]=0; tab[n+1]=0; v[0]=0; v[n+1]=0; for(int i=1; i<=n; ++i){ cin>>tab[i]; v[i]=0; sum+=tab[i]; } while(l<=n && tab[l]==0) ++l; if(l==n+1){ cout<<"NIE\n"; continue; } while(r>=0 && tab[r]==0) --r; bool vd=true; for(int i=l; i<=r; ++i) if(tab[i]==0){ vd=false; break; } if(!vd){ cout<<"NIE\n"; continue; } //cout<<l<<" "<<r<<nw; if(r-l+1==1){ if(tab[l]==1){ cout<<"TAK\n"; continue; } else{ cout<<"NIE\n"; continue; } } if(r-l+1==2){ if(abs(tab[l]-tab[r])<=1){ cout<<"TAK\n"; continue; } else{ cout<<"NIE\n"; continue; } } found=false; for(int i=1; i<=n; ++i){ dfs(1, v, 0); if(found){ cout<<"TAK\n"; break; } vector<int>().swap(v); v.resize(mn); //fill(v.begin(), v.end(), 0); } cout<<"NIE\n"; } } |
English