#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(); } |
English