#include <bits/stdc++.h> using namespace std; #define ll long long bool sprawdz(vector<ll> vec){ ll sm=0; for (auto x : vec)sm+=x; while(sm){ ll cur=vec.back(); vec.pop_back(); if ((!cur && sm) || (sm==cur && sm>1))return false; sm-=cur; if (cur>vec.back()){ if (sm==vec.back() && sm==cur-1)return true; else return false; } vec.back()-=cur-1; sm-=cur-1; } return true; } void solve(){ ll n,sm=0; cin >> n; vector<ll> wej(n); for (ll i = 0; i<n; i++){ cin >> wej[i]; sm+=wej[i]; } while(wej.size() && !wej.back()){ wej.pop_back(); n--; } if (sprawdz(wej)){ cout << "TAK\n"; return; } if (n>1 && wej[n-2]){ wej[n-2]--; if (sprawdz(wej)){ cout << "TAK\n"; return; } } cout << "NIE\n"; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); ll 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 | #include <bits/stdc++.h> using namespace std; #define ll long long bool sprawdz(vector<ll> vec){ ll sm=0; for (auto x : vec)sm+=x; while(sm){ ll cur=vec.back(); vec.pop_back(); if ((!cur && sm) || (sm==cur && sm>1))return false; sm-=cur; if (cur>vec.back()){ if (sm==vec.back() && sm==cur-1)return true; else return false; } vec.back()-=cur-1; sm-=cur-1; } return true; } void solve(){ ll n,sm=0; cin >> n; vector<ll> wej(n); for (ll i = 0; i<n; i++){ cin >> wej[i]; sm+=wej[i]; } while(wej.size() && !wej.back()){ wej.pop_back(); n--; } if (sprawdz(wej)){ cout << "TAK\n"; return; } if (n>1 && wej[n-2]){ wej[n-2]--; if (sprawdz(wej)){ cout << "TAK\n"; return; } } cout << "NIE\n"; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); ll t; cin >> t; while(t--)solve(); } |