Cod sursa(job #2437886)

Utilizator marinaoprOprea Marina marinaopr Data 10 iulie 2019 17:06:36
Problema Perle Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.92 kb
#include <stdio.h>



#define DIM 10005



using namespace std;



FILE *fin = fopen("perle.in", "r");

FILE *fout = fopen("perle.out", "w");



int T,n,valid[2],stiva[2][3*DIM],vf[2],x,i;



int main()

{

    fscanf(fin, "%d", &T);



    while(T)

    {

        fscanf(fin, "%d", &n);



        if(n == 1)

        {

            fprintf(fout, "1\n");
            fscanf(fin,"%d",&x);

            --T;

            continue;

        }



        valid[0] = valid[1] = 1;

        vf[0] = vf[1] = 0;

        stiva[0][0] = 5;

        stiva[1][0] = 6;

        while(n)

        {

            fscanf(fin, "%d", &x);



            for(i=0; i<2; ++i)

            {

                if(!valid[i])

                    continue;



                if(vf[i] < 0)

                {

                    valid[i] = 0;

                    continue;

                }



                if(stiva[i][vf[i]] == x)

                {

                    --vf[i];

                    continue;

                }



                if(stiva[i][vf[i]] < 4 and stiva[i][vf[i]] != x)

                {

                    valid[i] = 0;

                    continue;

                }



                if(stiva[i][vf[i]] == 4)

                    --vf[i];

                else

                    if(stiva[i][vf[i]] == 5)

                        if(x == 3)

                            valid[i] = 0;

                        else

                            if(x == 1)

                            {

                                --vf[i];

                                stiva[i][++vf[i]] = 6;

                                stiva[i][++vf[i]] = 4;

                                stiva[i][++vf[i]] = 3;

                                stiva[i][++vf[i]] = 4;

                            }

                            else; //x = 2

                    else // stiva[i][vf[i]] = 6

                        if(x == 2)

                            --vf[i];

                        else

                            if(x == 1)

                            {

                                --vf[i];

                                stiva[i][++vf[i]] = 4;

                                stiva[i][++vf[i]] = 2;

                            }

                            else //x = 3

                            {

                                --vf[i];

                                stiva[i][++vf[i]] = 6;

                                stiva[i][++vf[i]] = 5;

                            }

                }



            --n;

        }//while n



        if((valid[0] and vf[0] == -1) or (valid[1] and vf[1] == -1))

            fprintf(fout, "1\n");

        else

            fprintf(fout, "0\n");



        --T;

    }//while T



    return 0;

}