Cod sursa(job #159588)

Utilizator runnaway90Oprescu Radu Constantin runnaway90 Data 14 martie 2008 11:33:34
Problema Perle Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include<stdio.h>

int i,n,m,ts,a,b,c,e[10002];

int max(int a,int b)
{
    if (a>b) return a;
    else     return b;
}

int EvalA();
int EvalB();
int EvalC();

int main()
{
    freopen("perle.in","r",stdin);
    freopen("perle.out","w",stdout);
    scanf("%d",&n);
    for (ts=1;ts<=n;ts++)
    {
	scanf("%d",&m);
	for(i=1;i<=m;i++)
	    scanf("%d",&e[i]);
	i=1;
	if (m==1) a=1;
	else a=0;
 	i=1;b=EvalB();
 	if (i!=m) b=0;
	i=1;c=EvalC();
	if (i!=m) c=0;

	printf("%d\n",max(max(a,b),c));
    }
    return 0;
}

int EvalA()
{
     if (i<=m)
     {if (e[i]==1 || e[i]==2 || e[i]==3)
	return 1;
     else
	 return 0;
     }
     else
         return 0;
}

int EvalB()
{
    if (i<=m)
    if (e[i]==2 && i<=m)
    {
		i++;EvalB();
    }
    else
    {
	if (e[i]!=1)
	   return 0;
	i++;
	if (EvalA()==0)
	   return 0;
	i++;
	if (e[i]!=3)
	   return 0;
	i++;
	if (EvalA()==0)
	   return 0;;
	i++;
	if (EvalC()==0)
	   return 0;;
    }
}

int EvalC()
{int r=0;
    if (i<=m)
    if (e[i]==2)
       return 1;
    else
    if (e[i]==3)
    {
         i++;
         r=EvalB();
         if (r==1) 
         {
                   i++;
                   r=EvalC();
         }
    }
    else
    if (e[i]==1 && e[i+1]==2)
    {
                i+=2;
                r=EvalA();
    }
    return r;
}