Pagini recente » Cod sursa (job #2323137) | Cod sursa (job #1191032) | Cod sursa (job #1555641) | Cod sursa (job #300930) | Cod sursa (job #2893929)
//Ilie Dumitru
#include<cstdio>
#include<vector>
typedef long long int ll;
const int NMAX=10005;
const ll MOD=1000000007;
FILE* f=fopen("perle.in", "r"), *g=fopen("perle.out", "w");
int n, v[NMAX];
int rec(int index, char perla)
{
if(index>n)
return n+1;
switch(perla)
{
case 'B':
{
if(v[index]==3)
return n+1;
if(v[index]==2)
return rec(index+1, 'B');
if(index+2<n && v[index+2]==3)
return rec(index+4, 'C');
return n+1;
}
case 'C':
{
switch(v[index])
{
case 2:
return index+1;
case 1:
{
if(index+1<n && v[index+1]==2)
return index+3;
return n+1;
}
case 3:
return rec(rec(index+1, 'B'), 'C');
}
}
}
return n+1;
}
int solve()
{
int i;
fscanf(f, "%d", &n);
for(i=0;i<n;++i)
fscanf(f, "%d", v+i);
switch(*v)
{
case 1:
{
switch(n)
{
case 1:
return 1;
case 3:
return v[1]==2;
default:
{
if(n>4 && v[2]==3)
return rec(4, 'C')==n;
return 0;
}
}
}
case 2:
{
if(n==1)
return 1;
return rec(1, 'B')==n;
}
case 3:
{
if(n==1)
return 1;
return rec(rec(1, 'B'), 'C')==n;
}
}
return 0;
}
int main()
{
int t;
fscanf(f, "%d", &t);
while(t--)
fprintf(g, "%d\n", solve());
fclose(f);
fclose(g);
return 0;
}