Cod sursa(job #190906)

Utilizator cotofanaCotofana Cristian cotofana Data 24 mai 2008 14:48:39
Problema Perle Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <stdio.h>

int v[10002], vtmp[10002], ok;

int rezolvaB(int);
int rezolvaC(int);

int rezolvaB(int in)
{
	int ok=0;
	if (in>=v[0]) return 0;
	if (v[in]==2)
	{
		vtmp[in]=2;
		vtmp[in+1]=5;
		ok=rezolvaB(in+1);
	}
	else if (v[in]==1)
	{
		vtmp[in]=1;
		vtmp[in+1]=4;
		vtmp[in+2]=3;
		vtmp[in+3]=4;
		vtmp[in+4]=6;
		ok=rezolvaC(in+4);
	}
	return ok;
}

int rezolvaC(int in)
{
	int ok=0, i;
	if (in>=v[0]) return 0;
	if (v[in]==2 && in==v[0])
	{
		ok=1;
	}
	else if (v[in]==1)
	{
		vtmp[in]=1;
		vtmp[in+1]=2;
		vtmp[in+2]=4;
		ok=1;
		for (i=1; i<=v[0]; i++)
			if (v[i]!=vtmp[i] && vtmp[i]!=4) ok=0;
	}
	else if (v[in]==3)
	{
		;
	}
	return ok;
}

void rezolva()
{
	ok=0;
	if (v[0]==1)
	{
		ok=1;
		return;
	}
	else if (v[0]==2)
	{
		ok=0;
		return;
	}
	else if (v[0]==3)
	{
		ok=0;
		if (v[1]==1 && v[2]==2 && v[3]==3) ok=1;
		return;
	}
	else
	{
		if (v[1]==2)
		{
			ok=rezolvaB(1);
			return;
		}
		else if (v[1]==3)
		{
			ok=rezolvaC(1);
			return;
		}
		else
		{
			rezolvaB(1);
			rezolvaC(1);
		}
	}
}

int main()
{
	freopen("perle.in", "rt", stdin);
	freopen("perle.out", "wt", stdout);
	int n, i, j;
	scanf("%d\n", &n);
	for (i=0; i<n; i++)
	{
		scanf("%d ", &v[0]);
		for (j=1; j<=v[0]; j++) scanf("%d ", &v[j]);
		rezolva();
		printf("%d\n", ok);
		scanf("\n");
	}

	return 0;
}