Cod sursa(job #3332018)

Utilizator raulthestormIlie Raul Ionut raulthestorm Data 2 ianuarie 2026 22:35:45
Problema Perle Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <fstream>

using namespace std;

ifstream f("perle.in");
ofstream g("perle.out");

int n, i, v[10010];
bool rez;

bool A();
bool B();
bool C();

bool A()
{
	if(i > n) return 0;
	if(v[i] == 1 || v[i] == 2 || v[i] == 3)
	{
		i++;
		return 1;
	}
	return 0;
}

bool B()
{
	if(i > n || v[i] == 3)
		return 0;
	if(v[i] == 2)
	{
		i++;
		return B();
	}
	else
		if (v[i] == 1)
		{
			i++;
			bool aux = A();
			if(aux == 0 || v[i] != 3)
				return 0;
			i++;
			aux = A();
			if(aux == 0)
				return 0;
			return C();
		}
	return 0;
}

bool C()
{
	if(i > n) return 0;
	if(v[i] == 2)
	{
		i++;
		return 1;
	}
	else
		if(v[i] == 1)
		{
			i++;
			if(v[i] != 2)
			{
				i++;
				return 0;
			}
			else
			{
				i++;
				return A();
			}
		}
		else
		{
			i++;
			bool aux = B();
			if(aux == 0)
				return 0;
			return C();
		}
}

int main()
{
	int T;
	f >> T;
	while(T--)
	{
		f >> n;
		for(i = 1; i <= n; i++)
			f >> v[i];
		//
		rez = 0;
		//
		i = 1;
		rez = A();
		if(rez == 1 && i == n + 1)
		{
			g << "1\n";
			continue;
		}
		//
		i = 1;
		rez = B();
		if(rez == 1 && i == n + 1)
		{
			g << "1\n";
			continue;
		}
		//
		i = 1;
		rez = C();
		if(rez == 1 && i == n + 1)
		{
			g << "1\n";
			continue;
		}
		g << "0\n";
	}
	f.close();
	g.close();
	return 0;
}