#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
int t, n;
vector<int> BT;
bool backtrack(int ind, vector<int> &tab){
if(BT == tab){
return true;
}
bool ans = false;
if(ind != 0 && BT[ind - 1] < tab[ind - 1]){
BT[ind - 1] ++;
ans |= backtrack(ind - 1, tab);
BT[ind - 1] --;
}
if(ind != n - 1 && BT[ind + 1] < tab[ind + 1]){
BT[ind + 1] ++;
ans |= backtrack(ind + 1, tab);
BT[ind + 1] --;
}
return ans;
}
int main(){
ios_base::sync_with_stdio(false);
cin>>t;
for(int e = 1; e<=t; e++){
cin>>n;
vector <int> tab;
for(int i=1; i<=n; i++){
int a;
cin>>a;
tab.push_back(a);
}
BT.resize(n);
bool ans = false;
for(int i=0; i<n; i++){
BT.assign(n, 0);
BT[i] = 1;
if(backtrack(i, tab)){
ans = true;
break;
}
}
if(ans){
cout<<"TAK"<<endl;
} else {
cout<<"NIE"<<endl;
}
}
}
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 | #include <iostream> #include <string> #include <vector> #include <algorithm> using namespace std; int t, n; vector<int> BT; bool backtrack(int ind, vector<int> &tab){ if(BT == tab){ return true; } bool ans = false; if(ind != 0 && BT[ind - 1] < tab[ind - 1]){ BT[ind - 1] ++; ans |= backtrack(ind - 1, tab); BT[ind - 1] --; } if(ind != n - 1 && BT[ind + 1] < tab[ind + 1]){ BT[ind + 1] ++; ans |= backtrack(ind + 1, tab); BT[ind + 1] --; } return ans; } int main(){ ios_base::sync_with_stdio(false); cin>>t; for(int e = 1; e<=t; e++){ cin>>n; vector <int> tab; for(int i=1; i<=n; i++){ int a; cin>>a; tab.push_back(a); } BT.resize(n); bool ans = false; for(int i=0; i<n; i++){ BT.assign(n, 0); BT[i] = 1; if(backtrack(i, tab)){ ans = true; break; } } if(ans){ cout<<"TAK"<<endl; } else { cout<<"NIE"<<endl; } } } |
English