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