#include <bits/stdc++.h> using namespace std; #define ll long long constexpr int maxn = 1e6+2; ll arr[maxn], in[maxn], out[maxn]; void solve() { int n; cin >> n; int mn_v=1e9, mx_v=-1e9; vector <ll> ls; ll even=0, odd=0; for(int i=1; i<=n; i++) { cin >> arr[i]; if(arr[i]) mx_v = max(mx_v,i), mn_v = min(mn_v,i); } for(int i=1; i<=n; i++) { if(!arr[i] && i > mn_v && i < mx_v) { cout << "NIE\n"; return; } else if(arr[i]) { ls.push_back(arr[i]); if(i&1) odd += arr[i]; else even += arr[i]; } } if(abs(even-odd) > 1) { cout << "NIE\n"; return; } for(int i=0; i<=n; i++) in[i]=out[i]=0; for(int i=1; i<(int)ls.size(); i++) { int val = min(ls[i-1]-in[i-1], ls[i]); in[i-1] += val; out[i] += val; if(i == (int)ls.size()-1) { int val2 = min(ls[i-1]-out[i-1],ls[i]); out[i-1] += val2; in[i] += val2; } else { int val2 = min(ls[i-1]-out[i-1],ls[i]-1); out[i-1] += val2; in[i] += val2; } } int out_diff=0, in_diff=0; for(int i=0; i<(int)ls.size(); i++) { if(ls[i]-out[i] > 1) { cout << "NIE\n"; return; } else if(ls[i]-out[i] == 1) out_diff++; if(ls[i]-in[i] > 1) { cout << "NIE\n"; return; } else if(ls[i]-in[i] == 1) in_diff++; } if(!((out_diff == 1 && in_diff == 1) || (!out_diff && !in_diff))) { cout << "NIE\n"; return; } cout << "TAK\n"; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t; cin >> t; while(t--) solve(); }
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 ll long long constexpr int maxn = 1e6+2; ll arr[maxn], in[maxn], out[maxn]; void solve() { int n; cin >> n; int mn_v=1e9, mx_v=-1e9; vector <ll> ls; ll even=0, odd=0; for(int i=1; i<=n; i++) { cin >> arr[i]; if(arr[i]) mx_v = max(mx_v,i), mn_v = min(mn_v,i); } for(int i=1; i<=n; i++) { if(!arr[i] && i > mn_v && i < mx_v) { cout << "NIE\n"; return; } else if(arr[i]) { ls.push_back(arr[i]); if(i&1) odd += arr[i]; else even += arr[i]; } } if(abs(even-odd) > 1) { cout << "NIE\n"; return; } for(int i=0; i<=n; i++) in[i]=out[i]=0; for(int i=1; i<(int)ls.size(); i++) { int val = min(ls[i-1]-in[i-1], ls[i]); in[i-1] += val; out[i] += val; if(i == (int)ls.size()-1) { int val2 = min(ls[i-1]-out[i-1],ls[i]); out[i-1] += val2; in[i] += val2; } else { int val2 = min(ls[i-1]-out[i-1],ls[i]-1); out[i-1] += val2; in[i] += val2; } } int out_diff=0, in_diff=0; for(int i=0; i<(int)ls.size(); i++) { if(ls[i]-out[i] > 1) { cout << "NIE\n"; return; } else if(ls[i]-out[i] == 1) out_diff++; if(ls[i]-in[i] > 1) { cout << "NIE\n"; return; } else if(ls[i]-in[i] == 1) in_diff++; } if(!((out_diff == 1 && in_diff == 1) || (!out_diff && !in_diff))) { cout << "NIE\n"; return; } cout << "TAK\n"; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int t; cin >> t; while(t--) solve(); } |