#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
bool check(vector<ll> arr, bool sub_beg, bool sub_end){
const int n = arr.size();
for(int i=0; i<n; ++i){
--arr[i];
if(arr[i] < 0) return false;
if(i==n-1) return arr[i] == 0;
if(arr[i] <= arr[i+1]){
arr[i+1] -= arr[i];
arr[i] = 0;
}else{
return false;
}
if(i==n-2 && arr[i+1]==0 && !sub_end) return true;
}
return false;
}
bool check(vector<ll> arr){
return check(arr, 0, 0);
}
bool solve(){
int n;
cin >> n;
vector<ll> arr;
{
vector<ll> _arr(n);
ll Prev=0;
int cnt_changes_0=0;
int first = 0;
int last = 0;
for(int i=0; i<n; ++i){
ll &x = _arr[i];
cin >> x;
if(x!=0 && cnt_changes_0==0) first = i;
if(x!=0) last = i;
if((x==0) != (Prev==0)) ++cnt_changes_0;
Prev = x;
}
if(cnt_changes_0 > 2)
return false;
if(cnt_changes_0 == 0)
return true;
arr.resize(last-first+1);
for(int i=first; i<=last; ++i)
arr[i-first] = _arr[i];
n = arr.size();
}
if(check(arr)){
return true;
}
if(n>=3){
arr[n-2] --;
if(check(arr,0,1))
return true;
arr[n-2] ++;
}
if(n>=2){
arr[1] --;
if(check(arr,1,0))
return true;
arr[1] ++;
}
return false;
}
int main(){
cin.tie(0)->sync_with_stdio(0);
int t;
cin >> t;
while(t--)
cout << (solve() ? "TAK\n" : "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> using namespace std; typedef long long ll; typedef pair<int,int> pii; bool check(vector<ll> arr, bool sub_beg, bool sub_end){ const int n = arr.size(); for(int i=0; i<n; ++i){ --arr[i]; if(arr[i] < 0) return false; if(i==n-1) return arr[i] == 0; if(arr[i] <= arr[i+1]){ arr[i+1] -= arr[i]; arr[i] = 0; }else{ return false; } if(i==n-2 && arr[i+1]==0 && !sub_end) return true; } return false; } bool check(vector<ll> arr){ return check(arr, 0, 0); } bool solve(){ int n; cin >> n; vector<ll> arr; { vector<ll> _arr(n); ll Prev=0; int cnt_changes_0=0; int first = 0; int last = 0; for(int i=0; i<n; ++i){ ll &x = _arr[i]; cin >> x; if(x!=0 && cnt_changes_0==0) first = i; if(x!=0) last = i; if((x==0) != (Prev==0)) ++cnt_changes_0; Prev = x; } if(cnt_changes_0 > 2) return false; if(cnt_changes_0 == 0) return true; arr.resize(last-first+1); for(int i=first; i<=last; ++i) arr[i-first] = _arr[i]; n = arr.size(); } if(check(arr)){ return true; } if(n>=3){ arr[n-2] --; if(check(arr,0,1)) return true; arr[n-2] ++; } if(n>=2){ arr[1] --; if(check(arr,1,0)) return true; arr[1] ++; } return false; } int main(){ cin.tie(0)->sync_with_stdio(0); int t; cin >> t; while(t--) cout << (solve() ? "TAK\n" : "NIE\n"); } |
English