Cod sursa(job #1436120)

Utilizator tamionvTamio Vesa Nakajima tamionv Data 15 mai 2015 09:38:03
Problema Perle Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.68 kb
#include <stack>
#include <fstream>
using namespace std;

enum perle{
	A = 4, B = 5, C = 6 };

bool verifica(ifstream& f){
	int nr_perle = 0;
	f >> nr_perle;
	if(nr_perle == 1){
		int vreau_sa_ma_scap_de_perla = 0;
		f >> vreau_sa_ma_scap_de_perla;
		return true; }
	else{
		int nou = 0;
		stack<int> posibilitati[2];
		posibilitati[0].push(5);
		posibilitati[1].push(6);
		bool e_posibil[2] = {true, true};
		for(int i = 0; i < nr_perle; ++i){
			f >> nou;
			for(int j = 0; j < 2; ++j){
				if(posibilitati[j].empty()){
					e_posibil[j] = false; }
				else if(e_posibil[j]){
					switch(posibilitati[j].top()){
					default:
						if(posibilitati[j].top() == nou){
							posibilitati[j].pop(); }
						else{
							e_posibil[j] = false; }
						break;
					case 4:
						posibilitati[j].pop();
						break;
					case 5:
						switch(nou){
						case 1:
							posibilitati[j].pop();
							posibilitati[j].push(6);
							posibilitati[j].push(4);
							posibilitati[j].push(3);
							posibilitati[j].push(4); 
							break;
						case 3:
							e_posibil[j] = false;
							break; }
						break;
					case 6:
						switch(nou){
						case 1:
							posibilitati[j].pop();
							posibilitati[j].push(4);
							posibilitati[j].push(2);
							break;
						case 2:
							posibilitati[j].pop();
							break;
						case 3:
							posibilitati[j].pop();
							posibilitati[j].push(6);
							posibilitati[j].push(5);
							break; }
						break; } } } }
		return (e_posibil[0] && posibilitati[0].empty()) ||
			(e_posibil[1] && posibilitati[0].empty()); } }

int main(){
	ifstream f("perle.in");
	ofstream g("perle.out");
	int n = 0;
	f >> n;
	for(int i = 0; i < n; ++i){
		g << verifica(f) << '\n'; }
	return 0; }