#include <iostream>
using namespace std;
int n, start, stop;
long long origin[1000010];
long long tois[1000010];
bool spots_check()
{
for (int i = stop+1; i < n ; i++)
{
if (origin[i] != 0)
return false;
}
return true;
}
bool loop_check()
{
long long tmp = 0;
for (int i = start; i < stop-1 ; i++)
{
tmp = tois[i] - tmp;
if (tmp <= 0) return false;
}
return tmp == tois[stop-1];
}
void find_ss()
{
int i;
for(i = 0; i < n; i++)
if (origin[i] != 0) break;
start = i;
for(; i < n; i++)
if (origin[i] == 0) break;
stop = i;
}
bool scen1()
{
for (int i = start; i < stop; i++)
tois[i] = origin[i];
for (int i = start; i < stop; i++)
{
tois[i]--;
if(loop_check()) return true;
tois[i]++;
}
return false;
}
bool scen2()
{
for (int i = start+1; i < stop-1; i++)
{
for (int j = i; j < stop-1; j++)
{
for (int k = i; k < j; k++)
{
tois[k]++;
}
if(loop_check()) return true;
for (int k = i; k < j; k++)
{
tois[k]--;
}
}
}
return false;
}
void one_day()
{
cin >> n;
for (int i = 0; i < n; i++)
cin >> origin[i];
find_ss();
if(!spots_check())
{
cout << "NIE\n";
return;
}
if(scen1()) {
cout << "TAK\n";
return;
}
if(scen2()) {
cout << "TAK\n";
return;
}
cout << "NIE\n";
}
int main() {
int t;
cin >> t;
for(int i = 0; i < t; i++)
one_day();
return 0;
}
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 | #include <iostream> using namespace std; int n, start, stop; long long origin[1000010]; long long tois[1000010]; bool spots_check() { for (int i = stop+1; i < n ; i++) { if (origin[i] != 0) return false; } return true; } bool loop_check() { long long tmp = 0; for (int i = start; i < stop-1 ; i++) { tmp = tois[i] - tmp; if (tmp <= 0) return false; } return tmp == tois[stop-1]; } void find_ss() { int i; for(i = 0; i < n; i++) if (origin[i] != 0) break; start = i; for(; i < n; i++) if (origin[i] == 0) break; stop = i; } bool scen1() { for (int i = start; i < stop; i++) tois[i] = origin[i]; for (int i = start; i < stop; i++) { tois[i]--; if(loop_check()) return true; tois[i]++; } return false; } bool scen2() { for (int i = start+1; i < stop-1; i++) { for (int j = i; j < stop-1; j++) { for (int k = i; k < j; k++) { tois[k]++; } if(loop_check()) return true; for (int k = i; k < j; k++) { tois[k]--; } } } return false; } void one_day() { cin >> n; for (int i = 0; i < n; i++) cin >> origin[i]; find_ss(); if(!spots_check()) { cout << "NIE\n"; return; } if(scen1()) { cout << "TAK\n"; return; } if(scen2()) { cout << "TAK\n"; return; } cout << "NIE\n"; } int main() { int t; cin >> t; for(int i = 0; i < t; i++) one_day(); return 0; } |
English