Cod sursa(job #163291)

Utilizator mihai_floreaFlorea Mihai Alexandru mihai_florea Data 21 martie 2008 21:46:31
Problema Perle Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <cstdio>
int a[10][100],n;
void citire (){
	int m,j;
	freopen("perle.in","r",stdin);
	scanf("%d",&n);
	for(int i=1;i<=n;i++){
			     scanf("%d ",&m);
			     for(j=1;j<=m;j++)
					      scanf("%d ",&a[i][j]);
			     }
	}
int A (int x, int y);
int B (int x, int y);
int C (int x, int y);
int main ()
{
citire();
freopen("perle.out","w",stdout);
for(int i=1;i<=n;i++)
		     if(a[i][2]==0)
				   printf("1\n");
			   else    {
				   if(a[i][1]==1){
						 if(B(i,1)==1)
							      printf("1\n");
						      else
							      if(C(i,1)==1)
									  printf("1\n");
								  else
								      printf("0\n");
						 }
				   if(a[i][1]==2)
						 printf("%d\n",B(i,1));

				   if(a[i][1]==3)
						 printf("%d\n",C(i,1));
				   }
return 0;
}
int A (int x, int y)
	{
	if(a[x][y]==0)
		      return 0;
	return 1;
	}
int B (int x, int y)
	{
	if(a[x][y]==0)
		      return 0;
	if(a[x][y]==2)
		      return B(x,y+1);
	if(a[x][y]==1){
		      if(A(x,y+1)==1  &&
			 a[x][y+2]==3 &&
			 A(x,y+3)==1  &&
			 C(x,y+4)==1)
				     return 1;
			 else
			     return 0;
		      }
	return 0;
	}
int C (int x, int y)
	{
	if(a[x][y]==0)
		      return 0;
	if(a[x][y]==2)
		      return 1;
	if(a[x][y]==3){
		      if(B(x,y+1)==1 &&
			 C(x,y+2)==1)
				     return 1;
			    else
				return 0;
		      }
	if(a[x][y+1]==2 &&
	   A(x,y+2)==1)
		       return 1;
		else
		    return 0;
	}