Pagini recente » Cod sursa (job #2502339) | Cod sursa (job #3177249) | Cod sursa (job #1491675) | Cod sursa (job #816723) | Cod sursa (job #36222)
Cod sursa(job #36222)
/*
*
*
info-arena 2.0 - Arhiva - Perle
*
*
*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define INPUT "perle.in"
#define OUTPUT "perle.out"
FILE *fin=fopen(INPUT, "r"),*fout=fopen(OUTPUT, "w");
int n,a[10002],lungime;
char b[20000];
void citeste();
int rezolva();
int main()
{
int t;
fscanf(fin, "%d", &t);
for(int i=1;i<=t;++i)
{
lungime=0;
citeste();
fprintf(fout, "%d\n", rezolva());
memset(b,0,sizeof(b));
}
fclose(fin);
fclose(fout);
return 0;
}
void citeste()
{
fscanf(fin, "%d", &n);
for(int i=1;i<=n;++i)
fscanf(fin, "%d", &a[i]);
if(a[1]==1)
{
if(n==1)
{
b[1]='1';lungime=1;
}
else
if(n==3)
{
b[1]='1';b[2]='2';b[3]='A';lungime=3;
}
else
{
b[1]='1';b[2]='A';b[3]='3';b[4]='A';b[5]='C';lungime=5;
}
}
else
if(a[1]==2)
{
if(n==1)
{
b[1]='2';lungime=1;
}
else
{
b[1]='2';b[2]='B';lungime=2;
}
}
else
{
if(n==1)
{
b[1]='3';
lungime=1;
}
else
{
b[1]='3';b[2]='B';b[3]='C';lungime=3;
}
}
}
int rezolva()
{
int valf=1;
for(int i=1;i<=n&&valf;++i)
{
if(b[i]=='A')
{
if(a[i]==1)
b[i]='1';
else
if(a[i]==2)
b[i]='2';
else
b[i]='3';
}
else
if(b[i]=='B')
{
if(a[i]==2)
{
for(int j=lungime;j>=i;--j)
b[j+1]=b[j];
++lungime;
b[i]='2';
b[i+1]='B';
}
else
if(a[i]==1)
{
for(int j=lungime;j>=i;--j)
b[j+4]=b[j];
lungime+=4;
b[i]='1';
b[i+1]='A';
b[i+2]='3';
b[i+3]='A';
b[i+4]='C';
}
else
valf=0;
}
else
if(b[i]=='C')
{
if(a[i]==2)
b[i]='2';
else
if(a[i]==3)
{
for(int j=lungime;j>=i;--j)
b[j+2]=b[j];
lungime+=2;
b[i]='3';
b[i+1]='B';
b[i+2]='C';
}
else
{
for(int j=lungime;j>=i;--j)
b[j+2]=b[j];
lungime+=2;
b[i]='1';
b[i+1]='2';
b[i+2]='A';
}
}
if((b[i]=='1'||b[i]=='2'||b[i]=='3')&&(b[i]!=a[i]+'0'))
{
valf=0;
break;
}
}
if(b[n+1]!='\0')
valf=0;
return valf;
}