Cod sursa(job #2302233)

Utilizator CyborgSquirrelJardan Andrei CyborgSquirrel Data 13 decembrie 2018 22:52:52
Problema Perle Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("perle.in");
ofstream fout("perle.out");

istream & in = fin;
ostream & out = fout;

int n;
int vec[10041], veclen;

bool ans;
void ReadFirst()
{
	in >> n;
}

void Read()
{
	in >> veclen;
	for(int i = 0; i < veclen; i++){
		in >> vec[i];
	}
}

void mb();
void mc();
int index;
bool valid;

void mb()
{
	if(vec[index] == 2){
		index++;
		mb();
	}else if(vec[index] == 1 && vec[index+2] == 3){
		index += 4;
		mc();
	}else{
		valid = false;
	}
}

void mc()
{
	if(vec[index] == 2){
		index++;
	}else if(vec[index] == 3){
		index++;
		mb();
		mc();
	}else if(vec[index] == 1 && vec[index+1] == 2){
		index += 3;
	}else{
		valid = false;
	}
}
//3 1 2 3 2 1 2 3 3 1 3 3 3 2 2
//* * * * * * * * 
//C

void Reset()
{
	index = 0;
	valid = true;
}

void Solve()
{
	ans = false;
	if(veclen <= 1){
		ans = true;
	}else{
		Reset();
		mb();
		valid &= (index == veclen);
		ans |= valid;
		
		Reset();
		mc();
		valid &= (index == veclen);
		ans |= valid;
	}
}

void Write()
{
	out << ans << "\n";
}

int main()
{
	ReadFirst();
	for(int i = 0; i < n; i++){
		Read();
		Solve();
		Write();
	}
	return 0;
}