Cod sursa(job #465992)

Utilizator ncbllrNegrii Costin ncbllr Data 25 iunie 2010 17:28:29
Problema Perle Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include<iostream.h>

long n,m,v[20001];

int test( int cine, int unde )
{
	if( cine == 1 ) //A
	{
		if( unde == m )
			return unde;
		return 0;
	}
	if( cine == 2)// B  -> 2B | 1A3AC
	{
		if( v[ unde ] == 3 ) return 0;
		if( v[ unde ] == 1 )//1A3AC
		{
			if( m - unde < 4 ) return 0;
			if( v[ unde + 2] != 3) return 0;
			int w = test( 3 , unde + 4);
			return w;
		}
		if( v[ unde ] == 2 ) //2B
	    {
			if( m- unde < 1	) return 0;
			
			return test (2,unde +1);
 		}
	}
	if( cine == 3) // 2 // 12A
	{
		if( v[ unde ] == 2 ) 
			return unde;
        if( v[ unde ] == 1 )
        {
            if( m - unde < 2) return 0;
            if( v[ unde + 1]!=2) return 0;
            return test(1, unde +2);
		}
		if( v[ unde ] == 3 )//3 BC
		{
			if( m - unde < 2) return 0;
			int poz = test( 2, unde + 1);
			return test( 3, poz + 1);
		}
	}
}
int main()
{
	freopen("perle.in","r",stdin);
	freopen("perle.out","w",stdout);
	cin>>n;
	while(n)
	{
		cin>>m;
		for(int i=1; i<=m; i++) cin>>v[i];
		
		int p = (test( 1 , 1) == m) ;
		p +=(test( 2, 1)== m) ;
		p +=(test( 3 , 1) == m );
		if( p >= 1)
			cout<<1<<endl;
		else cout<<0<<endl;
		n--;
	}
}