Cod sursa(job #428220)

Utilizator ooctavTuchila Octavian ooctav Data 28 martie 2010 23:58:07
Problema Perle Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.91 kb
// perle.cpp : Defines the entry point for the console application.
//

#include <stdio.h>
#include <algorithm>
#include <list>
#include <map>
#include <vector>
#include <set>
#include <queue>
#include <deque>
#include <string>
#include <cassert>
#include <iostream>
#include <iterator>
const int LMAX = 10011;

int N, L;
char l[LMAX];
char e[LMAX];
char cpy[LMAX];
int x=0,curent=0,b=0,r=0,de=0;

void lit(int i);

void citire()
{
	scanf("%d",&L);
	for(int i = 1 ; i <= L ; i++)
		scanf("%d",&l[i]);
}

int bac()
{
	for(int i = 1 ; i <= L ; i++)
	{
		if(e[i]=='A' || e[i] == 'B' || e[i]=='C')
			lit(i);
		if(e[i] != l[i])
			return 0;
	}
	if(e[L+1])
		return 0;
	else
		return 1;
}



void lit(int i)
{
	
		if(e[i]=='A')
		{
			if(l[i]==1)
				e[i]=1;
			else if(l[i]==2)
				e[i]=2;
			else if(l[i]==3)
				e[i]=3;
		}
		else if(e[i]=='B')
		{
			if(l[i]==1)
			{
				memcpy(cpy,e+i+1,L);
				e[i]=1;
				e[i+1]='A';
				e[i+2]=3;
				e[i+3]='A';
				e[i+4]='C';
				memcpy(e+i+5,cpy,L);
			}
			else
			{
				memcpy(cpy,e+i+1,L);
				e[i]=2;
				e[i+1]='B';
				memcpy(e+i+2,cpy,L);
			}
		
		}
		else if(e[i]=='C')
		{
			if(l[i]==1)
			{
				memcpy(cpy,e+i+1,L);
				e[i]=1;
				e[i+1]=2;
				e[i+2]='A';
				memcpy(e+i+3,cpy,L);
			}
			else if(l[i]==2)
				e[i]=2;
			else
			{
				memcpy(cpy,e+i+1,L);
				e[i]=3;
				e[i+1]='B';
				e[i+2]='C';
				memcpy(e+i+3,cpy,L);
			}
			
		}

}

int main()
{

	freopen("perle.in","r",stdin);
	freopen("perle.out","w",stdout);

	scanf("%d\n",&N);

	for(int i=1;i<=N;i++)
	{

		citire();
		memset(e,0,LMAX);
		e[1]='A';
		if(bac())
		{
			printf("1\n");
			continue;
		}
		memset(e,0,LMAX);
		e[1]='B';
		if(bac())
		{
			printf("1\n");
			continue;
		}
		memset(e,0,LMAX);
		e[1]='C';
		if(bac())
			printf("1\n");
		else
			printf("0\n");

	}


	return 0;
}