#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
void red(vector <ll> &a)
{
int i=0,j=a.size()-1;
while(a[i]==0) i++;
while(a[j]==0) j--;
vector <ll> zw(1,0);
for(int k=i;k<=j;k++) zw.push_back(a[k]);
a=zw;
}
int main()
{
cin.tie(0)->sync_with_stdio(0);
int sen;
cin>>sen;
for(int ar=0;ar<sen;ar++)
{
int n;
cin>>n;
vector <ll> il(n);
for(int i=0;i<n;i++)
cin>>il[i];
red(il);
n=il.size()-1;
vector <vector<ll>> dp(n+1,vector <ll> (6,-1));
dp[0][0]=0;
for(int i=1;i<=n;i++)
{
int ogr=0;
if(i==1||il[i]==0) ogr=-1;
for(int k=0;k<6;k++) if(dp[i-1][k]>ogr) dp[i][k]=2*il[i]-dp[i-1][k];
if(i%2==1)
{
if(dp[i-1][0]>ogr) dp[i][1]=2*il[i]-dp[i-1][0]-1;
if(dp[i-1][0]>ogr) dp[i][2]=2*il[i]-dp[i-1][0]-2;
if(dp[i-1][1]>ogr) dp[i][2]=2*il[i]-dp[i-1][1]-1;
if(dp[i-1][3]>ogr) dp[i][5]=2*il[i]-dp[i-1][3]-1;
}
else
{
if(dp[i-1][0]>ogr) dp[i][3]=2*il[i]-dp[i-1][0]-1;
if(dp[i-1][0]>ogr) dp[i][4]=2*il[i]-dp[i-1][0]-2;
if(dp[i-1][3]>ogr) dp[i][4]=2*il[i]-dp[i-1][3]-1;
if(dp[i-1][1]>ogr) dp[i][5]=2*il[i]-dp[i-1][1]-1;
}
//for(int k=0;k<6;k++) cout<<dp[i][k]<<" ";
//cout<<"\n";
}
int bulka=0;
for(int k=0;k<6;k++)
if(k!=0&&k!=1&&k!=3&&dp[n][k]==0) bulka=1; ///??????
if(bulka) cout<<"TAK\n";
else cout<<"NIE\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 | #include <bits/stdc++.h> using namespace std; typedef long long ll; void red(vector <ll> &a) { int i=0,j=a.size()-1; while(a[i]==0) i++; while(a[j]==0) j--; vector <ll> zw(1,0); for(int k=i;k<=j;k++) zw.push_back(a[k]); a=zw; } int main() { cin.tie(0)->sync_with_stdio(0); int sen; cin>>sen; for(int ar=0;ar<sen;ar++) { int n; cin>>n; vector <ll> il(n); for(int i=0;i<n;i++) cin>>il[i]; red(il); n=il.size()-1; vector <vector<ll>> dp(n+1,vector <ll> (6,-1)); dp[0][0]=0; for(int i=1;i<=n;i++) { int ogr=0; if(i==1||il[i]==0) ogr=-1; for(int k=0;k<6;k++) if(dp[i-1][k]>ogr) dp[i][k]=2*il[i]-dp[i-1][k]; if(i%2==1) { if(dp[i-1][0]>ogr) dp[i][1]=2*il[i]-dp[i-1][0]-1; if(dp[i-1][0]>ogr) dp[i][2]=2*il[i]-dp[i-1][0]-2; if(dp[i-1][1]>ogr) dp[i][2]=2*il[i]-dp[i-1][1]-1; if(dp[i-1][3]>ogr) dp[i][5]=2*il[i]-dp[i-1][3]-1; } else { if(dp[i-1][0]>ogr) dp[i][3]=2*il[i]-dp[i-1][0]-1; if(dp[i-1][0]>ogr) dp[i][4]=2*il[i]-dp[i-1][0]-2; if(dp[i-1][3]>ogr) dp[i][4]=2*il[i]-dp[i-1][3]-1; if(dp[i-1][1]>ogr) dp[i][5]=2*il[i]-dp[i-1][1]-1; } //for(int k=0;k<6;k++) cout<<dp[i][k]<<" "; //cout<<"\n"; } int bulka=0; for(int k=0;k<6;k++) if(k!=0&&k!=1&&k!=3&&dp[n][k]==0) bulka=1; ///?????? if(bulka) cout<<"TAK\n"; else cout<<"NIE\n"; } } |
English