Cod sursa(job #380498)

Utilizator doru.nituNitu Doru Constantin doru.nitu Data 6 ianuarie 2010 13:37:21
Problema Perle Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.78 kb
#include<stdio.h>
#include<string.h>

int i,j,n,l,ok,k,t;
char stiva[10010],c;
char b2[3]={2,'2','b'};
char b1[6]={5,'1','a','3','a','c'};
char c3[4]={3,'3','b','c'};
char c1[4]={3,'1','2','a'};


void copy(char a[])
{ 
	int n=int(a[0]);
	for(;n>1;--n) stiva[++k]=a[n];
}	

void solve()
{ 
	k=0;l=0;c=0;t=0;
	scanf("%d",&l);
	
	if(l==1) {   scanf("%d",&t);
		         printf("1\n");
	             return ;
	         }
	if(l==3)
	{	 scanf("%d",&t);      
	     c=char(t+48);
		 if(c!='1') { printf("0\n");
		              return ;
		            }
         scanf("%d",&t);      
	     c=char(t+48);
		 if(c!='2') { printf("0\n");
		              return ;
		            }
		 scanf("%d",&t);
		 
		 printf("1\n");
         return ;
	}		 
     		 
    scanf("%d",&t);      
	  c=char(t+48);
	if(c=='1') copy(b1);
	else if(c=='2') copy(b2);
    else if(c=='3') copy(c3);
	
	for(int i=2;i<=l;++i)  
	{ scanf("%d",&t);      
	  c=char(t+48);
	  
	  if(c==stiva[k]) --k;
	  else if(c=='1') 
	  {	if(stiva[k]=='a') --k;
	    else if(stiva[k]=='b') --k,copy(b1);
	    else if(stiva[k]=='c') --k,copy(c1);
        else { printf("0\n");
               return ;
		     }
	  }
	  else if(c=='2')
	  { if(stiva[k]=='a'||stiva[k]=='c') --k;
	    else if(stiva[k]=='b') --k,copy(b2);
	    else { printf("0\n");
               return ;
		     }
	  }
	  else if(c=='3')
	  { if(stiva[k]=='a') --k;
	    else if(stiva[k]=='c') --k,copy(c3);
	    else { printf("0\n");
		       return ;
		     }
	  }
	}
		       
    if(k==0)printf("1\n");
	else printf("0\n");
}	

int main()
{ 
	freopen("perle.in","r",stdin);
	freopen("perle.out","w",stdout);
	
	scanf("%d",&n);
	
	for(i=1;i<=n;++i) solve();
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
}