#include <bits/stdc++.h>
using namespace std;
#define st first
#define nd second
#define pb push_back
#define rep(i,a,b) for(int i = a; i <= b; i++)
#define irep(i,a,b) for(int i = a; i >= b; i--)
typedef long long ll;
typedef long double ld;
//typedef __int128 int128;
typedef vector<int> vi;
typedef pair<int,int> pi;
typedef pair<double,double> pd;
typedef pair<ll,ll> pl;
const int max_n = 1e6+7;
int arr[max_n];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
int t; cin >> t;
while(t--){
int n; cin >> n; rep(i,1,n) cin >> arr[i];
bool ans = 1; bool z = 0;
rep(i,2,n){
if(arr[i] == 0 && arr[i-1] != 0) z = 1;
if(arr[i] > 0 && z) ans = 0;
}
if(!ans){
cout << "NIE\n";
continue;
}
int a = 0; int b = 0;
rep(i,1,n) if(arr[i] > 0 && a == 0) a = i;
irep(i,n,1) if(arr[i] > 0 && b == 0) b = i;
//cout << "a: " << a << " b: " << b << '\n';
rep(i,1,n) arr[i]--;
bool start = 0; bool finish = 0; //int ile_nz = 0;
rep(i,a+1,b){
//if(arr[i] >= 0) ile_nz++; //KURWA NIE WIEM
if(arr[i] > 0 && finish) ans = 0;
arr[i] -= arr[i-1]+1; //ewentualnie +1
//cout << "i: " << i << " arr: " << arr[i] << '\n';
if(arr[i] == -1){
if(!start){
start = 1;
rep(j,i,b) arr[j]++;
}
else if(!finish){
start = 1;
finish = 1;
arr[i] = 0;
}
else ans = 0;
}
else if(arr[i] == -2){
//if(!start && !finish && ile_nz > 2){
if(!start && !finish){
start = 1;
rep(j,i,b) arr[j]++;
finish= 1;
arr[i] = 0;
}
else ans = 0;
}
else if(arr[i] < -2) ans = 0;
}
if(arr[b] > 0) ans = 0;
if(ans) cout << "TAK\n";
else cout << "NIE\n";
}
return 0;
}
//g++ -O3 -static -Wall .cpp -std=c++17
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 | #include <bits/stdc++.h> using namespace std; #define st first #define nd second #define pb push_back #define rep(i,a,b) for(int i = a; i <= b; i++) #define irep(i,a,b) for(int i = a; i >= b; i--) typedef long long ll; typedef long double ld; //typedef __int128 int128; typedef vector<int> vi; typedef pair<int,int> pi; typedef pair<double,double> pd; typedef pair<ll,ll> pl; const int max_n = 1e6+7; int arr[max_n]; int main(){ ios::sync_with_stdio(0); cin.tie(0); int t; cin >> t; while(t--){ int n; cin >> n; rep(i,1,n) cin >> arr[i]; bool ans = 1; bool z = 0; rep(i,2,n){ if(arr[i] == 0 && arr[i-1] != 0) z = 1; if(arr[i] > 0 && z) ans = 0; } if(!ans){ cout << "NIE\n"; continue; } int a = 0; int b = 0; rep(i,1,n) if(arr[i] > 0 && a == 0) a = i; irep(i,n,1) if(arr[i] > 0 && b == 0) b = i; //cout << "a: " << a << " b: " << b << '\n'; rep(i,1,n) arr[i]--; bool start = 0; bool finish = 0; //int ile_nz = 0; rep(i,a+1,b){ //if(arr[i] >= 0) ile_nz++; //KURWA NIE WIEM if(arr[i] > 0 && finish) ans = 0; arr[i] -= arr[i-1]+1; //ewentualnie +1 //cout << "i: " << i << " arr: " << arr[i] << '\n'; if(arr[i] == -1){ if(!start){ start = 1; rep(j,i,b) arr[j]++; } else if(!finish){ start = 1; finish = 1; arr[i] = 0; } else ans = 0; } else if(arr[i] == -2){ //if(!start && !finish && ile_nz > 2){ if(!start && !finish){ start = 1; rep(j,i,b) arr[j]++; finish= 1; arr[i] = 0; } else ans = 0; } else if(arr[i] < -2) ans = 0; } if(arr[b] > 0) ans = 0; if(ans) cout << "TAK\n"; else cout << "NIE\n"; } return 0; } //g++ -O3 -static -Wall .cpp -std=c++17 |
English