Cod sursa(job #153833)

Utilizator slayer4uVictor Popescu slayer4u Data 10 martie 2008 19:18:05
Problema Perle Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <stdio.h>

long o, i, poz, t, n, x[10010];

bool B();
bool C();

bool A()
{
	if (poz <= n)
	{
		poz ++;
		return true;
	}
	return false;
}

bool B()
{
	if (x[poz] == 2)
	{
		poz ++;
		return B();
	}
	else
	if (x[poz] == 1)
	{
		poz ++;
		if (!A())
			return false;

		if (x[poz] != 3)
			return false;
		poz ++;

		if (!A())
			return false;		

		return C();
	}

	return false;
}

bool C()
{
	if (x[poz] == 2)
	{
		poz ++;
		return true;
	}
	else
	if (x[poz] == 3)
	{
		poz ++;
		if (!B())
			return false;

		return C();
	}
	else
	{
		poz ++;
		if (x[poz] == 2) 
		{
			poz ++;
			return A();
		}
		else
			return false;
	}
}

int main()
{
	freopen ("perle.in", "rt", stdin);
	freopen ("perle.out", "wt", stdout);

	scanf("%ld", &o);

	for (t = 1; t <= o; t ++)
	{
		scanf("%ld", &n);
		for (i = 1; i <= n; i ++)
			scanf("%ld", &x[i]);
		
		poz = 1;

		if (n == 1)
			printf("1\n");
		else
		if (B() && poz == n + 1)
			printf("1\n");
		else
		{
			poz = 1;
			if (C() && poz == n + 1)
				printf("1\n");
			else
				printf("0\n");
		}

	}

	return 0;
}