Cod sursa(job #3741)

Utilizator adamescugeorge adamescu adamescu Data 28 decembrie 2006 13:24:41
Problema Perle Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include<stdio.h>
int main()
{ int l,t,v,i,st[2][100],niv[2],valid[2];
     FILE *f=fopen("perle.in","r");
     FILE *g=fopen("perle.out","w");
     fscanf(f,"%d",&t);
     while (t--)
     {  fscanf(f,"%d",&l);
       if (l==1)
	{fscanf(f,"%d",&v);
	fprintf(g,"1\n");
	}
       else
       {
	niv[0]=niv[1]=1;
	st[0][0]=5;
	st[1][0]=6;
       while (l--)
       {fscanf(f,"%d",&v);
	for (i=0;i<2;i++)
	if (valid[i])
	{
	 if (st[i][niv[i]-1]<4)
	 { if (st[i][niv[i]-1]==v)
	    valid[i]=1;
	 else
	  valid[i]=0;
	   niv[i]--;
	   continue;
	 }
	 if (st[i][niv[i]-1]==4)
	 { niv[i]--;
	  continue;
	 }
	 if (st[i][niv[i]-1]==5)
	 { if (v==3)
	    valid[i]=0;
	   if (v==1)
	   { niv[i]--;
	     st[i][niv[i]++]=6;
	     st[i][niv[i]++]=4;
	     st[i][niv[i]++]=3;
	     st[i][niv[i]++]=4;
	   }
	 continue;
	 }
	 if (v==2)
	  {niv[i]--;
	   continue;
	  }
	 if (v==3)
	  {niv[i]--;
	   st[i][niv[i]++]=6;
	   st[i][niv[i]++]=5;
	   continue;
	   }
	  if (v==1)
	  { niv[i]--;
	   st[i][niv[i]++]=4;
	   st[i][niv[i]++]=2;
	   continue;
	  }
	 if ((niv[i]==0) && (l))
	   valid[i]=0;
	 }
	 }
	 if (((valid[1]) && (niv[1]==0)) || ((valid[0]) && (niv[0]==0)))
	     fprintf(g,"1\n");
	     else
	     fprintf(g,"0\n");
	 }
	}
	fclose(f);
	fclose(g);
	return 0;
       }