Cod sursa(job #3739)

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

      fclose(f);
      fclose(g);
      return 0;
}