Cod sursa(job #233697)

Utilizator petroMilut Petronela petro Data 18 decembrie 2008 22:22:52
Problema Perle Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.27 kb
//Milut Petronela, CN Roman Voda Roman, clasa a 10a

#include<stdio.h>

FILE *f=fopen("perle.in","r");
FILE *g=fopen("perle.out","w");

#define M 10010

int vf=0,n,l,y[M];
char st[M];

int initializare()
{int i;

i=1;
vf=0;

if(y[i]==1 && y[i+2]==3) {st[++vf]='1';
			    st[++vf]='A';
			    st[++vf]='3';
			    st[++vf]='A';
			    st[++vf]='C';}

else if(y[i]==1&&y[i+1]==2) {st[++vf]='1';
			     st[++vf]='2';
			     st[++vf]='C';}

     else if(y[i]==2) {st[++vf]='2';
		       st[++vf]='B';}

	  else if(y[i]==3) {st[++vf]='3';
			    st[++vf]='B';          
			    st[++vf]='C';}

st[vf+1]=NULL;

return 0;
}

int verifica()
{int i=1,j;


while(i<=vf)
{if(st[i]=='B' && y[i]==1) {for(j=i+1;j<=vf;j++)
				  st[j+4]=st[j];

			      vf=vf+4;
			      st[i]='1';
			      st[i+1]='A';
			      st[i+2]='3';
			      st[i+3]='A';
			      st[i+4]='C';
			      st[vf+1]=NULL;

			      i=i+4;}

 else if(st[i]=='B' && y[i]==2) {for(j=i+1;j<=vf;j++)
				  st[j+1]=st[j];

				vf=vf+1;
				st[i]='2';
				st[i+1]='B';
				st[vf+1]=NULL;
				i++;}

      else if(st[i]=='C' && y[i]==1) {for(j=i+1;j<=vf;j++)
					st[j+2]=st[j];

				       vf=vf+2;
				       st[i]='1';
				       st[i+1]='2';
				       st[i+2]='A';
				       st[vf+1]=NULL;
				       i=i+2;
				      }

	   else if(st[i]=='C'&&y[i]==3) {for(j=i+1;j<=vf;j++)
					  st[j+2]=st[j];

					 vf=vf+2;
					 st[i]='3';
					 st[i+1]='B';
					 st[i+2]='C';
					 i++;
					 st[vf+1]=NULL;
					 }

		else if(st[i]=='C' && y[i]==2) {st[i]='2';
                				i++;
					       st[vf+1]=NULL;}
		     else if(st[i]!='B'&&st[i]!='C') i++;

 }

  if(vf==l){  i=1;
       for(j=1;j<=l&&i;j++)
	 if(st[i]=='B') i=0;
	 else if(st[i]=='C') i=0;
	      else if(st[i]=='A') if(st[i]-'0'!=y[i]) i=0;

       fprintf(g,"%d\n",i);}

  else fprintf(g,"0\n");


return 0;
}

int main()
{int k,a,b,j;

fscanf (f,"%d",&n);

for(k=1;k<=n;k++)
 {fscanf(f,"%d",&l);

  if(l==1) {fprintf(g,"1\n");
	    fscanf(f,"%d",&a);}

  else if(l==2) {fprintf(g,"0\n");
		 fscanf(f,"%d%d",&a,&b);}

       else {for(j=1;j<=l;j++)
	      fscanf(f,"%d",&y[j]);

	     initializare();

	     verifica();}

   }

fclose(f);
fclose(g);

return 0;
}