Cod sursa(job #1904471)

Utilizator qwertyuiTudor-Stefan Berbinschi qwertyui Data 5 martie 2017 16:13:23
Problema Perle Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

const int NMax = 12;
const int LMax = 10050;

ifstream fin ("perle.in");
ofstream fout ("perle.out");

int sequence[2][LMax];
int N, L;

int go_down(int length)
{
	int check[2], level[2];
	check[0] = check[1] = 1;
	level[0] = level[1] = 1;

	sequence[0][0] = 5;
	sequence[1][0] = 6;

	while (length--)
	{
        int x;
        fin >>x;

        for (int i = 0; i < 2; ++i)
        {
			if (check[i])
			{
				if (sequence[i][level[i] - 1] <= 3) //A
                   { check[i] = (sequence[i][--level[i]] == x); continue; }
				if (sequence[i][level[i] - 1] == 4) //1 | 2 | 3
					{ --level[i]; continue;}
				if (sequence[i][level[i] - 1] == 5)
				{
                    if (x == 3)
						check[i] = 0; //not sure
					if (x == 1) //1A3AC
					{
                        --level[i];
                        sequence[i][level[i]++] = 6;
                        sequence[i][level[i]++] = 4;
                        sequence[i][level[i]++] = 3;
                        sequence[i][level[i]++] = 4;
					}
					continue;
				}
			}

			if (x == 2) //C
				--level[i];
			if (x == 1) //12A
			{
                --level[i];
                sequence[i][level[i]++] = 4;
                sequence[i][level[i]++] = 2;
			}
			if (x == 3) //3BC
			{
				--level[i];
				sequence[i][level[i]++] = 6;
                sequence[i][level[i]++] = 5;
			}

        if (!level[i] && length)
			check[i] = 0;
        }
	}

	return ((!level[0] && check[0]) || (!level[1] && check[1]));

}

int main()
{
	fin >>N;

	while (N--)
	{
        fin >>L;

        if (L == 1)
			fout <<1 <<'\n';
		else
			fout <<go_down(L) <<'\n';
	}

    return 0;
}