Cod sursa(job #533371)

Utilizator mihaipopa12Popa Mihai mihaipopa12 Data 13 februarie 2011 20:14:08
Problema Perle Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include<stdio.h>

FILE*f=fopen("perle.in","r");
FILE*g=fopen("perle.out","w");

int i,T,S[10010],ok,N;

void B();

void C(){
	if ( i > N ){
		ok = 1;
		return;
	}
	if ( i == N ){
		if ( S[i] != 2 ){
			ok = 1;
			return;
		}
		else
			return;
	}
	else{
		if ( S[i] == 3 ){
			++i;
			B();
			++i;
			C();
		}
		if ( S[i] == 1 && S[i+1] != 2 ){
			ok = 1;
			return ;
		}
		if ( S[i] == 1 && S[i+1] == 2 ){
			i += 2;
		}
	}
	
}



void B(){
	if ( i > N ){
		ok = 1;
		return;
	}
	if ( S[i] == 2 ){
		++i;
		B();
	}
	else{
		if ( S[i] == 1 && S[i+2] == 3 ){
			i += 4;
			C();
		}
	}
}

void eval(){
	if ( N == 1 ){
		return ;
	}
	if ( S[i] == 2 ){
		++i;
		B();
		return;
	}
	if ( S[i] == 1 ){
		if ( S[i+1] == 2 && i == N - 2 ){
			i = N;
			return;
		}
		else{
			i = i + 4;
			C();
			return;
		}
	}
	if ( S[i] == 3 ){
		++i;
		B();
		++i;
		C();
		return;
	}
	
}

int main () {
	fscanf(f,"%d",&T);
	while ( T-- ){
		fscanf(f,"%d",&N);
		for ( i = 1 ; i <= N ; ++i )
			fscanf(f,"%d",&S[i]);
		i = 1;
		ok = 0;
		eval();
		if ( i != N )
			ok = 1;
		fprintf(g,"%d\n",!ok);
	}
	
	fclose(f);
	fclose(g);
	
	return 0;
}