#include <bits/stdc++.h>
using namespace std;
using ll = int64_t;
void solve(){
int N;
cin >> N;
vector<ll> F(N);
for(ll& x : F){
cin >> x;
}
auto res = [&]() -> bool {
for(int it = 0; it < 2; it++){
while(F.back() == 0){
F.pop_back();
}
reverse(F.begin(), F.end());
}
N = (int)F.size();
for(int i = 0; i < N; i++) if(F[i] == 0) return false;
for(int i = 0; i+1 < N; i++){
ll a = max(ll(0), min(F[i], F[i+1] - 1));
F[i] -= a;
F[i+1] -= a;
if(F[i]) break;
}
for(int i = N-1; i > 0; i--){
ll a = max(ll(0), min(F[i], F[i-1] - 1));
F[i] -= a;
F[i-1] -= a;
if(F[i]) break;
}
for(int it = 0; it < 2; it++){
while(F.back() == 0){
F.pop_back();
}
reverse(F.begin(), F.end());
}
N = (int)F.size();
for(int i = 0; i < N; i++) if(F[i] == 0) return false;
for(int i = 0; i < N; i++){
F[i]--;
}
for(int i = 0; i + 1 < N; i++){
ll a = min(F[i], F[i+1]);
F[i] -= a;
F[i+1] -= a;
}
return F == vector<ll>(N, 0);
}();
cout << (res ? "TAK" : "NIE") << '\n';
return;
}
int main(){
ios_base::sync_with_stdio(false), cin.tie(nullptr);
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 | #include <bits/stdc++.h> using namespace std; using ll = int64_t; void solve(){ int N; cin >> N; vector<ll> F(N); for(ll& x : F){ cin >> x; } auto res = [&]() -> bool { for(int it = 0; it < 2; it++){ while(F.back() == 0){ F.pop_back(); } reverse(F.begin(), F.end()); } N = (int)F.size(); for(int i = 0; i < N; i++) if(F[i] == 0) return false; for(int i = 0; i+1 < N; i++){ ll a = max(ll(0), min(F[i], F[i+1] - 1)); F[i] -= a; F[i+1] -= a; if(F[i]) break; } for(int i = N-1; i > 0; i--){ ll a = max(ll(0), min(F[i], F[i-1] - 1)); F[i] -= a; F[i-1] -= a; if(F[i]) break; } for(int it = 0; it < 2; it++){ while(F.back() == 0){ F.pop_back(); } reverse(F.begin(), F.end()); } N = (int)F.size(); for(int i = 0; i < N; i++) if(F[i] == 0) return false; for(int i = 0; i < N; i++){ F[i]--; } for(int i = 0; i + 1 < N; i++){ ll a = min(F[i], F[i+1]); F[i] -= a; F[i+1] -= a; } return F == vector<ll>(N, 0); }(); cout << (res ? "TAK" : "NIE") << '\n'; return; } int main(){ ios_base::sync_with_stdio(false), cin.tie(nullptr); int T; cin >> T; while(T--) solve(); } |
English