Cod sursa(job #189649)

Utilizator scvalexAlexandru Scvortov scvalex Data 16 mai 2008 17:23:03
Problema Perle Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <iostream>
#include <fstream>

using namespace std;

int L;
int A[10001];

bool tryB(int i);

bool tryC(int i)
{
	if (A[i] == 2) {
		if (i == L-1)
			return true;
		return tryC(i+1);
	}
	if ((A[i] == 1) && (A[i+1] == 2)) {
		if (i+2 == L-1)
			return true;
		return tryC(i+3);
	}
	if (A[i] == 3)
		return tryB(i+1);
	return false;
}

bool tryB(int i)
{
	if (A[i] == 2)
		return tryB(i+1);
	if ((A[i] == 1) && (A[i+2] == 3))
		return tryC(i+4);
	return tryC(i+1);
}

bool canMake()
{
	if (L == 1)
		return true;
	if (L == 2)
		return false;
	if (A[0] == 3)
		return tryC(0);
	return tryB(0);
}

int main(int argc, char *argv[])
{
	FILE *fi = fopen("perle.in", "r");
	int N;
	fscanf(fi, "%d", &N);
	ofstream fout("perle.out");
	while (N--) {
		fscanf(fi, "%d", &L);
		for (int i(0); i < L; ++i)
			fscanf(fi, "%d", A+i);
		fout << canMake() << endl;
	}
	fout.close();
	fclose(fi);

	return 0;
}