Cod sursa(job #744167)

Utilizator cbanu96Banu Cristian cbanu96 Data 7 mai 2012 20:17:25
Problema Perle Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <stdio.h>

#define FILEIN "perle.in"
#define FILEOUT "perle.out"
#define LMAX 10001

FILE *fout, *fin;
int N, L, v[LMAX];

int M3(int i);

int M2(int i)
{
	if(i > L)
		return 1;
	if(v[i] == 2) // B -> 2B
		return M2(i+1);
	if(v[i] == 1 && v[i+2] == 3 && i+4 <= L) // B -> 1A3AC
		return M3(i+4);
	return 0;
}

int M3(int i)
{
	if( i > L)
		return 1;
	if(v[i] == 2) // C -> 2
		return i+1;
	if(v[i] == 1 && v[i+1] == 2 && i+2 <= L) // C -> 12A
		return i+3;
	if(v[i] != 3) // C -> 3BC
		return 0;
	i = M2(i+1); 
	if(i) 
		return M3(i); 
	return 0;
}

int solve(int l)
{
	if(l == 1 || M2(1) > l || M3(1) > l)
		return 1;
	else
		return 0;
}
int main()
{
	int i;
	fin = fopen(FILEIN, "r");
	fout = fopen(FILEOUT, "w");
	fscanf(fin, "%d", &N);
	for(; N; N--)
	{
		fscanf(fin, "%d", &L);
		for ( i = 1; i <= L; i++)
			fscanf(fin, "%d", &v[i]);
		fprintf(fout, "%d\n", solve(L));
	}
	fclose(fin);
	fclose(fout);
	return 0;
}