#include<bits/stdc++.h> #define ll long long using namespace std; const int N = 1000007; ll tab[N], L[N], R[N], Lxd[N], Rxd[N]; string zad (int n) { L[0] = tab[0]; Lxd[0] = tab[0]; for (int i = 1; i < n; ++i) { L[i] = tab[i] - L[i-1] + 1; if (L[i] <= 0 && i < n-1) return "NIE"; Lxd[i] = tab[i] - Lxd[i-1]; } // for (int i = 0; i < n; ++i) { // cout<<L[i]<<' '; // } // cout<<'\n'; // for (int i = 0; i < n; ++i) { // cout<<Lxd[i]<<' '; // } // cout<<'\n'; R[n-1] = tab[n-1]; Rxd[n-1] = tab[n-1]; for (int i = n-2; i >= 0; --i) { R[i] = tab[i] - R[i+1] + 1; if (R[i] <= 0 && i > 0) return "NIE"; Rxd[i] = tab[i] - Rxd[i+1]; } // for (int i = 0; i < n; ++i) { // cout<<R[i]<<' '; // } // cout<<'\n'; // for (int i = 0; i < n; ++i) { // cout<<Rxd[i]<<' '; // } // cout<<'\n'; if (L[n-1] == 1 || R[0] == 1 || L[n-1] == 0 || R[0] == 0) return "TAK"; for (int i = 0; i < n; ++i) { if (tab[i] - Lxd[i] == Rxd[i+1]) return "TAK"; if (i < n-1 && Lxd[i] == R[i+1]) return "TAK"; if (i > 0 && L[i-1] == Rxd[i]) return "TAK"; } return "NIE"; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int t, n; cin>>t; for (int i = 0; i < t; ++i) { cin>>n; int id = 0; ll a; bool ended = false, started = false, fail = false; for (int j = 0; j < n; ++j) { cin>>a; if (a != 0) { if (ended) fail = true; started = true; tab[id++] = a; } else { if (started) ended = true; } } if (fail) cout<<"NIE\n"; else if (id == 0) cout<<"TAK\n"; else cout<<zad(id)<<'\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 | #include<bits/stdc++.h> #define ll long long using namespace std; const int N = 1000007; ll tab[N], L[N], R[N], Lxd[N], Rxd[N]; string zad (int n) { L[0] = tab[0]; Lxd[0] = tab[0]; for (int i = 1; i < n; ++i) { L[i] = tab[i] - L[i-1] + 1; if (L[i] <= 0 && i < n-1) return "NIE"; Lxd[i] = tab[i] - Lxd[i-1]; } // for (int i = 0; i < n; ++i) { // cout<<L[i]<<' '; // } // cout<<'\n'; // for (int i = 0; i < n; ++i) { // cout<<Lxd[i]<<' '; // } // cout<<'\n'; R[n-1] = tab[n-1]; Rxd[n-1] = tab[n-1]; for (int i = n-2; i >= 0; --i) { R[i] = tab[i] - R[i+1] + 1; if (R[i] <= 0 && i > 0) return "NIE"; Rxd[i] = tab[i] - Rxd[i+1]; } // for (int i = 0; i < n; ++i) { // cout<<R[i]<<' '; // } // cout<<'\n'; // for (int i = 0; i < n; ++i) { // cout<<Rxd[i]<<' '; // } // cout<<'\n'; if (L[n-1] == 1 || R[0] == 1 || L[n-1] == 0 || R[0] == 0) return "TAK"; for (int i = 0; i < n; ++i) { if (tab[i] - Lxd[i] == Rxd[i+1]) return "TAK"; if (i < n-1 && Lxd[i] == R[i+1]) return "TAK"; if (i > 0 && L[i-1] == Rxd[i]) return "TAK"; } return "NIE"; } int main() { ios_base::sync_with_stdio(0); cin.tie(0); int t, n; cin>>t; for (int i = 0; i < t; ++i) { cin>>n; int id = 0; ll a; bool ended = false, started = false, fail = false; for (int j = 0; j < n; ++j) { cin>>a; if (a != 0) { if (ended) fail = true; started = true; tab[id++] = a; } else { if (started) ended = true; } } if (fail) cout<<"NIE\n"; else if (id == 0) cout<<"TAK\n"; else cout<<zad(id)<<'\n'; } } |