#include <bits/stdc++.h>
using namespace std;
struct tr {
int in;
int out;
};
int setl(vector<int> zab) {
int l = 0;
while (!zab[l]) l++;
return l;
}
int setr(vector<int> zab) {
int r = zab.size() - 1;
while (!zab[r]) r--;
return r;
}
int main() {
cin.tie(0)->sync_with_stdio(0);
int t;
cin >> t;
while (t--) {
int n, l, r;
cin >> n;
vector<int> zab(n+8,0);
vector<tr> w(n+8,{0, 0});
for(int i=0;i<n;i++) cin >> zab[i];
l = setl(zab);
r = setr(zab);
if (r > 1 and zab[r] > zab[r - 1] and (r - l + 1) > 2) {
cout << "NIE\n";
continue;
}
if (l < (n - 1) and zab[l] > zab[l + 1] and (r - l + 1) > 2) {
cout << "NIE\n";
continue;
}
if (l > r) {
cout << "TAK\n";
continue;
}
bool gay = 0;
for (int i = l; i <= r; i++) {
if (zab[i] == 0) {
cout << "NIE\n";
gay = 1;
break;
}
}
if (gay) continue;
if (l == r) {
if (zab[l] == 1) {
cout << "TAK\n";
continue;
}
else {
cout << "NIE\n";
continue;
}
}
for (int i = l; i < r; i++) {
tr ll;
tr lr;
int ltr;
int rtl;
ll.in = zab[i] - w[i].in;
ll.out = zab[i] - w[i].out;
lr.in = zab[i + 1] - w[i + 1].in;
lr.out = zab[i + 1] - w[i + 1].out;
ltr = min(ll.out, lr.in);
rtl = min(ll.in, lr.out);
w[i].in += rtl;
w[i].out += ltr;
w[i + 1].in += ltr;
w[i + 1].out += rtl;
if(i!=(r-1)){
if(w[i+1].in==zab[i+1] and w[i+1].out==zab[i+1]){
//cout << i << '\n';
w[i+1].in--;
w[i].out--;
}
}
}
int w1 = 0, w2=0;
for (int i = l; i <= r; i++) {
w1 += (zab[i] - w[i].in);
w2 += (zab[i] - w[i].out);
}
if((w1==0 and w2==0) or (w1==1 and w2==1)){
cout << "TAK\n";
continue;
}
cout << "NIE\n";
// for(int i=0;i<n;i++){
// cout << w[i].in << ' ';
// }
// cout << '\n';
// for(int i=0;i<n;i++){
// cout << w[i].out << ' ';
// }
// cout << '\n' << '\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 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 | #include <bits/stdc++.h> using namespace std; struct tr { int in; int out; }; int setl(vector<int> zab) { int l = 0; while (!zab[l]) l++; return l; } int setr(vector<int> zab) { int r = zab.size() - 1; while (!zab[r]) r--; return r; } int main() { cin.tie(0)->sync_with_stdio(0); int t; cin >> t; while (t--) { int n, l, r; cin >> n; vector<int> zab(n+8,0); vector<tr> w(n+8,{0, 0}); for(int i=0;i<n;i++) cin >> zab[i]; l = setl(zab); r = setr(zab); if (r > 1 and zab[r] > zab[r - 1] and (r - l + 1) > 2) { cout << "NIE\n"; continue; } if (l < (n - 1) and zab[l] > zab[l + 1] and (r - l + 1) > 2) { cout << "NIE\n"; continue; } if (l > r) { cout << "TAK\n"; continue; } bool gay = 0; for (int i = l; i <= r; i++) { if (zab[i] == 0) { cout << "NIE\n"; gay = 1; break; } } if (gay) continue; if (l == r) { if (zab[l] == 1) { cout << "TAK\n"; continue; } else { cout << "NIE\n"; continue; } } for (int i = l; i < r; i++) { tr ll; tr lr; int ltr; int rtl; ll.in = zab[i] - w[i].in; ll.out = zab[i] - w[i].out; lr.in = zab[i + 1] - w[i + 1].in; lr.out = zab[i + 1] - w[i + 1].out; ltr = min(ll.out, lr.in); rtl = min(ll.in, lr.out); w[i].in += rtl; w[i].out += ltr; w[i + 1].in += ltr; w[i + 1].out += rtl; if(i!=(r-1)){ if(w[i+1].in==zab[i+1] and w[i+1].out==zab[i+1]){ //cout << i << '\n'; w[i+1].in--; w[i].out--; } } } int w1 = 0, w2=0; for (int i = l; i <= r; i++) { w1 += (zab[i] - w[i].in); w2 += (zab[i] - w[i].out); } if((w1==0 and w2==0) or (w1==1 and w2==1)){ cout << "TAK\n"; continue; } cout << "NIE\n"; // for(int i=0;i<n;i++){ // cout << w[i].in << ' '; // } // cout << '\n'; // for(int i=0;i<n;i++){ // cout << w[i].out << ' '; // } // cout << '\n' << '\n'; } } |
English