Cod sursa(job #483705)

Utilizator dcm9000Dinu Cristian Mircea - UPB dcm9000 Data 9 septembrie 2010 19:53:36
Problema Perle Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <iostream>
#include <algorithm>
#include <fstream>
#include <string>

using namespace std;

#define FILE_IN "perle.in"
#define FILE_OUT "perle.out"

int N;

int verif(char* sir)
{
	// sir "A"
	if (!sir[1]) return 1;

	// sir "B" (inceputul)
	int num2 = strspn(sir, "2");
	if ((sir[num2] == '1') && (sir[num2+2] == '3') && (sir[num2+3] != 0))
		sir += (num2+4);

	// sir "C"
	int necesare = 1;
	while (necesare--)
	{
		if (!*sir) return 0;

		// varianta 1
		if ((*sir == '1') && (*(sir+1) == '2') && (*(sir+2) != 0))
		{
			sir += 3;
			continue;
		}

		// varianta 2
		if (*sir == '2')
		{
			sir++;
			continue;
		}

		// varianta 3
		sir++;
		num2 = strspn(sir, "2");
		if (!((sir[num2] == '1') && (sir[num2+2] == '3') && (sir[num2+3] != 0))) return 0;
		sir += (num2+4);
		necesare += 2;
	}
	if (*sir) return 0; // mai exista ceva dupa ultimul C

	return 1;
}

int main()
{
	ifstream fisIn(FILE_IN);
	ofstream fisOut(FILE_OUT);
	
	fisIn >> N;

	char linie[10100];
	for (int i=0; i<N; i++)
	{
		int L;
		fisIn >> L;
		for (int j=0; j<L; j++)
		{
			int X;
			fisIn >> X;

			linie[j] = 48+X;
		}
		memset(linie+L, 0, 10100-L);
		
		fisOut << verif(linie) << "\n";
	}
}