Cod sursa(job #76884)

Utilizator alex23alexandru andronache alex23 Data 12 august 2007 08:25:45
Problema Perle Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.12 kb
#include <stdio.h>


int v[20000],k,l,n,i,j,a[10000],t ;

int functie()
 {
 n=0;k=1;
  while (k<=l)
    {if ((a[i]==4)&&(n>0)) {for (j=1;j<n;j++) a[j]=a[j+1];
			    n--;
			    k++;
			    }
      else
     if (v[k]==3) if ((n==0)||(a[i]==6))
		      if (n==0) {a[1]=5;a[2]=6;n=2;k++;}
			   else {for (j=n;j>=1;j--) a[j+1]=a[j];
				 a[1]=5;
				 n++;
				 k++;
				 }
		      else if (a[1]!=3) return 0;
				 else {for (j=1;j<n;j++) a[j]=a[j+1];
				       n--;
				       k++;
				       }
      else
     if (v[k]==1) if ((k==l-2)&&(v[k+1]==2)&&(n==1)&&(a[1]==6))  return 1;
			       else
		  if (n==0) {n=4;a[1]=4;a[2]=3;a[3]=4;a[4]=6;k++;}
			       else
		  if (a[1]==1) {for (j=1;j<n;j++) a[j]=a[j+1];
				n--;
				k++;
				}
			       else
		  if (a[1]==6) {for (j=n;j>=2;j--) a[j+1]=a[j];
				n++;
				k++;
				a[1]=2;
				a[2]=4;
				}
			       else
		  if (a[1]==5) {for (j=n;j>=2;j--) a[j+3]=a[j];
				n=n+3;
				a[1]=4;a[2]=3;a[3]=4;a[4]=6;
				k++;
				}
			       else return 0;
     else
    if (v[k]==2) if ((k==l)&&(n==1)&&(a[1]==6)) return 1;
		       else
		 if (n==0)/* {while (v[k]==2) k++;
			    n=5;
			    a[1]=1;a[2]=4;a[3]=3;a[4]=4;a[5]=6;
			    }*/
			  {k++; n=1;a[1]=5;}
			 else
		 if (a[1]==2) {for (j=1;j<n;j++) a[j]=a[j+1];
			       n--;
			       k++;
			       }
		       else
		 /*if (a[1]==5)
		       {while (v[k]==2) k++;
			for (j=n;j>=2;j--) a[j+4]=a[j];
			n=n+4;
			a[1]=1;a[2]=4;a[3]=3;a[4]=4;a[5]=6;
			}    */
		 if (a[1]==5) {k++;}
		       else
		 if (a[1]==6) {for (j=1;j<n;j++) a[j]=a[j+1];
			       n--;
			       k++;
			       }
			   else return 0;
    }
 if (n==0) return 1;
      else return 0;
 }


int main()
{FILE *fin,*fout;


fin=fopen("perle.in","r");
fout=fopen("perle.out","w");
fscanf(fin,"%d",&t);

for (i=1;i<=t;i++)
  {fscanf(fin,"%d",&l);
   for (j=1;j<=l;j++)
     fscanf(fin,"%d",&v[j]);
   if (l>1) {fprintf(fout,"%d",functie());
	     fprintf(fout,"\n");
	     }
       else {fprintf(fout,"%d",1);
	     fprintf(fout,"\n");
	     }
   }

fclose(fin);
fclose(fout);

return 0;
}