Cod sursa(job #2437614)

Utilizator marinaoprOprea Marina marinaopr Data 9 iulie 2019 20:52:01
Problema Perle Scor 70
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.69 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");
            --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;
}