Cod sursa(job #1597669)

Utilizator krityxAdrian Buzea krityx Data 12 februarie 2016 11:12:08
Problema Perle Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <fstream>

using namespace std;

bool c(int *v, int pos, int size);

bool b(int *v, int pos, int size)
{
	if (pos > size)
	{
		return false;
	}
	if (v[pos] == 2)
	{
		return b(v, pos + 1, size);
	}
	if (v[pos] == 1 && v[pos + 2] == 3)
	{
		return c(v, pos + 4, size);
	}
	return false;
}

bool c(int *v, int pos, int size)
{
	if (pos > size)
	{
		return false;
	}
	if (v[pos] == 3)
	{
		return b(v, pos + 1, size) && c(v, pos + 2, size);
	}
	else if (v[pos] == 2)
	{
		return pos == size;
	}
	else if (v[pos] == 1 && v[pos + 1] == 2)
	{
		return pos+2 == size;
	}
}

int check(int *v, int l)
{
	int result = 0;
	if (l == 1)
	{
		if (v[l] == 1 || v[l] == 2 || v[l] == 3)
		{
			result = 1;
		}
	}
	else
	{
		result = b(v, 1, l) || c(v, 1, l);
	}
	return result;
}

int main()
{
	int n, V[10002], L;
	ifstream f("perle.in");
	ofstream g("perle.out");
	f >> n;
	for (int i = 1; i <= n; i++)
	{
		f >> L;
		for (int j = 1; j <= L; j++)
		{
			f >> V[j];
		}
		g << check(V, L) << "\n";
	}
	f.close();
	g.close();

	return 0;
}