Cod sursa(job #2371870)

Utilizator AlexPascu007Pascu Ionut Alexandru AlexPascu007 Data 6 martie 2019 19:58:52
Problema Perle Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <fstream>
using namespace std;
ifstream fin("perle.in");
ofstream fout("perle.out");
int n,i,k,v[10010];
bool ok;
int A(),B(),C();
int main() {
	fin>>n;
	while (n--) {
		fin>>k;
		for (i=1;i<=k;i++)
			fin>>v[i];
		i=1, ok=A();
		if (i==k+1&&ok)
			fout<<"1\n";
		else {
			i=1, ok=B();
			if (i==k+1&&ok)
				fout<<"1\n";
			else {
				i=1, ok=C();
				if (i==k+1&&ok)
					fout<<"1\n";
				else
					fout<<"0\n";
			}
		}
	}
	return 0;
}
int A() { //A->1|2|3
	if (i==k+1)
		return 0;
	if (v[i]==1||v[i]==2||v[i]==3) {
		i++;
		return 1;
	}
	return 0;
}
int B() { //B->2B|1A3AC
	if (i==k+1)
		return 0;
	if (v[i]==2) {
		i++;
		return B();
	}
	else if (v[i]==1) {
		i++;
		if (!A()||v[i]!=3)
			return 0;
		i++;
		if (!A())
			return 0;
		return C();
	}
}
int C() { //2|3BC|12A
	if (i==k+1)
		return 0;
	if (v[i]==2) {
		i++;
		return 1;
	}
	if (v[i]==3) {
		i++;
		if (!B())
			return 0;
		i++;
		return C();
	}
	if (v[i]!=1)
		return 0;
	i++;
	if (v[i]!=2) {
		i++;
		return 0;
	}
	i++;
	return A();
}