Cod sursa(job #67050)

Utilizator tvladTataranu Vlad tvlad Data 22 iunie 2007 13:17:34
Problema Perle Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <stdio.h>

const int N = 10000;

int n, pz;
int a[N];
bool fail, fa, fb, fc;

void perlaa();
void perlab();
void perlac();

void perlaa() {
	++pz; if (pz > n) { fail = true; return; }
}

void perlab() {
	if (pz + 1 < n && a[pz] == 2) {
		++pz;
		perlab(); if (fail) return;
	} else
	if (pz + 4 < n && a[pz] == 1 && a[pz+2] == 3) {
		pz += 4;
		perlac(); if (fail) return;
	} else {
		fail = true;
		return;
	}
}

void perlac() {
	if (pz + 3 <= n && a[pz] == 1 && a[pz+1] == 2) {
		pz += 3;
	} else
	if (pz + 1 <= n && a[pz] == 2) {
		++pz;
	} else
	if (pz + 1 < n && a[pz] == 3) {
		++pz;
		perlab(); if (fail) return; if (pz >= n) { fail = true; return; }
		perlac(); if (fail) return; if (pz > n) { fail = true; return; }
	}
}

int main() {
	freopen("perle.in","rt",stdin);
	freopen("perle.out","wt",stdout);

	int m;
	scanf("%d",&m);
	for (int k = 0; k<m; ++k) {
		scanf("%d",&n);
		for (int i = 0; i<n; ++i) scanf("%d",&a[i]);
		
		fail = false; pz = 0;
		perlaa();
		if (pz == n) fa = fail; else fa = true;

		fail = false; pz = 0;
		perlab();
		if (pz == n) fb = fail; else fb = true;

		fail = false; pz = 0;
		perlac();
		if (pz == n) fc = fail; else fc = true;

		printf("%d\n",(fa && fb && fc) ? 0 : 1);
	}
	return 0;
}