#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'; } } |