Cod sursa(job #2840607)

Utilizator gabriela15Popescu Gabriela Irina gabriela15 Data 28 ianuarie 2022 14:34:36
Problema Perle Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.48 kb
#include <iostream>
#include <fstream>
#define NMAX 10000

using namespace std;

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

int s[2][NMAX + 10];

int main()
{
    int t, l, v, i;
    int a[2];
    int val[2];
    fin >> t;
    while(t--)
    {
        fin >> l;
        if(l==1)
        {
            fin >> l;
            fout << 1 << endl;
        }
        else
        {
            val[1]=val[0]=1;
            a[1]=a[0]=1;
            s[0][0]=5;
            s[1][0]=6;
            while (l--)
            {
                fin >> v;
                for(i=0; i<2; i++)
                {
                    if(val[i])
                    {
                        if(s[i][a[i]-1]<4)
                        {
                            if(s[i][--a[i]]==v)
                                val[i]=1;
                            else
                                val[i]=0;
                            break;
                        }
                        if(s[i][a[i]-1]==4)
                        {
                            a[i]--;
                            break;
                        }
                        if(s[i][a[i]-1]==5)
                        {
                            if(v==3)
                                val[i]=0;
                            if(v==1)
                            {
                                a[i]--;
                                s[i][a[i]++]=6;
                                s[i][a[i]++]=4;
                                s[i][a[i]++]=3;
                                s[i][a[i]++]=4;
                            }
                            break;
                        }
                        if(v==2)
                            a[i]--;
                        if(v==1)
                        {
                            a[i]--;
                            s[i][a[i]++]=4;
                            s[i][a[i]++]=2;
                        }
                        if(v==3)
                        {
                            a[i]--;
                            s[i][a[i]++]=6;
                            s[i][a[i]++]=5;
                        }
                    }
                    if(!a[i] && l)
                        val[i]=0;
                }
            }
            if((a[0]==0 && val[0]==1) || (a[1]==0 && val[1]==1))
                fout << 1 << endl;
            else
                fout << 0 << endl;
        }
    }
    return 0;
}