Cod sursa(job #560928)

Utilizator vld7Campeanu Vlad vld7 Data 18 martie 2011 19:14:11
Problema Perle Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <fstream.h>
#include <string.h>
ifstream f("perle.in");
ofstream g("perle.out");
int L,VF,i,v[10001];
char perle[10001];
void actualizareB1()
{
	perle[VF]='2'; perle[++VF]='B';
}
void actualizareB2()
{
	perle[VF]='1'; perle[++VF]='A'; perle[++VF]='3'; perle[++VF]='A'; perle[++VF]='C';
}
void actualizareC1()
{
	perle[VF]='2';
}
void actualizareC2()
{
	perle[VF]='3'; perle[++VF]='B'; perle[++VF]='C';
}
void actualizareC3()
{
	perle[VF]='1'; perle[++VF]='2'; perle[++VF]='A';
}
void actualizareTOTAL()
{
	if(perle[i]=='C' && v[i]==1)
		actualizareC3();
	if(perle[i]=='C' && v[i]==3)
		actualizareC2();
	if(perle[i]=='B' && v[i]==1)
		actualizareB2();
	if(perle[i]=='B' && v[i]==2)
		actualizareB1();
	if(perle[i]=='C' && v[i]==2)
		actualizareC1();
}
void prelucreaza()
{
	VF=1;
	if(L==1)
		g<<"1";
	if(L==2)
		g<<"0";
	if(L==3)
		if(v[1]==1 && v[2]==2)
		g<<"1";
	else
		g<<"0";
	if(L>3)
	{
		switch(v[1])
		{
			case 2 : actualizareB1(); break;
			case 1 : actualizareB2(); break;
			case 3 : actualizareC2(); break;
		}
			i=1;
			while(i<=L)
			{
				if(perle[i]=='B' && perle[i+1]=='C')
				{
					VF--;
					if(v[i]==2)
						actualizareB1();
					if(v[i]==1)
						actualizareB2();
					perle[++VF]='C';
				}
				if(perle[i]=='C' && perle[i+1]=='C')
				{
					VF--;
					if(v[i]==1)
						actualizareC3();
					if(v[i]==3)
						actualizareC2();
					if(v[i]==2)
						actualizareC1();
					perle[++VF]='C';
				}
				else
				actualizareTOTAL();
				i++;
			}
			if(VF==L)
				g<<"1";
			else
				g<<"0";
	}
	g<<'\n';
}
int main()
{
int N,k,j;
f>>N;
for(k=1;k<=N;k++)
{
	f>>L;
	for(j=1;j<=L;j++)
		f>>v[j];
	prelucreaza();
}
return 0;
}