Cod sursa(job #475998)

Utilizator darrenRares Buhai darren Data 9 august 2010 15:34:42
Problema Perle Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<fstream>
using namespace std;

bool test();
int test1(int pos);
int test2(int pos);

int n, l, v[10001];
int main()
{
	ifstream fin("perle.in");
	ofstream fout("perle.out");
	fin >> n;
	while (n--)
	{
		fin >> l;
		for (int i = 1; i <= l; ++i)
			fin >> v[i];

		fout << test() << '\n';
	}
}

bool test()
{
	if (l == 1) return true;

	int c1 = test1(1);
	int c2 = test2(1);

	return c1 > l || c2 > l;
}

int test1(int pos)
{
	if (pos > l) return 0;
	if (v[pos] == 2 && l > pos) return test1(pos + 1);
	if (v[pos] == 1 && v[pos + 2] == 3 && l > pos + 3) return test2(pos + 4);
	return 0;
}

int test2(int pos)
{
	if (pos > l) return 0;
	if (v[pos] == 2 && l >= pos) return pos + 1;
	if (v[pos] == 1 && v[pos + 1] == 2 && l >= pos + 2) return pos + 3;
	//3BC
	if (v[pos] == 3)
	{
		int aux = test1(pos + 1);
		if (aux != 0) return test2(aux);
	}
	return 0;
}