Cod sursa(job #618463)

Utilizator predator5047Butiu Alexandru Octavian predator5047 Data 15 octombrie 2011 17:24:28
Problema Perle Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include fstream.h

int L, i, Cs;
short v[10000];

short perlaB ()
{
	while (v[i] == 2)
	{
		if (L == 1) return 0;
		i++;
		L--;
	}
	if (v[i] == 3) return 0;
	if ((L = 5) && (v[i+2] == 3))
	{
		i += 4;
		L -= 4;
		Cs++;
	}
	else return 0;
	return 1;
}

short perlaC ()
{
	if (v[i] == 2)
	{
		if (L == 1)
		{
			if (Cs == 1) return 1;
			return 0;
		}
		else
		{
			if (Cs == 0) return 0;
			else
			{
				Cs--;
				i++;
				L--;
				if (Cs == 0) return 0;
				else return perlaC ();
			}
		}
	}
	if (v[i] == 1)
	{
		if (v[i+1] == 2)
		{
			if (L == 3)
			{
				if (Cs == 1) return 1;
				return 0;
			}
			else
			{
				if (Cs == 0) return 0;
				else
				{
					Cs--;
					i += 3;
					L -= 3;
					if (Cs == 0) return 0;
					else return perlaC ();
				}
			}
		}
		else return 0;
	}
	i++;
	L--;
	Cs--;
	if (perlaB ()) Cs++;
	else return 0;
	if (Cs) return perlaC ();
	return 1;
}


short treaba ()
{
	if (L == 1) return 1;
	if (v[i] == 2)
	{
		if (perlaB ())
		{
			return perlaC ();
		}
		return 0;
	}
	if (v[i] == 1)
	{
		if (L == 3)
		{
			if (v[i+1] == 2) return 1;
			return 0;
		}
		if (perlaB ())
		{
			return perlaC ();
		}
		return 0;
	}
	i++;
	L--;
	Cs++;
	if (perlaB ()) return perlaC ();
	return 0;
}

int main ()
{
	int N, j;
	ifstream fin (perle.in);
	ofstream fout (perle.out);
	fin  N;
	for (j = 0; j  N; j++)
	{
		fin  L;
		memset (v, 0, sizeof (v));
		for (i = 0; i  L; i++)
		{
			fin  v[i];
		}
		i = 0;
		Cs = 0;
		fout  treaba ()  n;
	}

	fin.close ();
	fout.close ();
	return 0;
}