Cod sursa(job #2208843)

Utilizator toadehuPuscasu Razvan Stefan toadehu Data 31 mai 2018 19:48:57
Problema Perle Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <fstream>

using namespace std;

const int A=4, B=5, C=6;
int n, lg, st[20000], v[10001];

int verif(int n)
{
    int vf = 1;
    for(int i=1; i<=n; i++)
    {
        if(vf == 0)
            return 0;
        else if(st[vf] < 4)
        {
            if(v[i] != st[vf])
                return 0;
            else
                vf--;
        }
        else if(st[vf] == A)
            --vf;
        else if(st[vf] == B)
        {
            if(v[i] == 1)
            {
                st[vf] = C;
                st[vf+1] = A;
                st[vf+2] = 3;
                st[vf+3] = A;
                vf+=3;
            }
            if(v[i] == 3)
                return 0;
        }
        else if(st[vf] == C)
        {
            if(v[i] == 1)
            {
                st[vf] = A;
                st[vf+1] = 2;
                vf++;
            }
            if(v[i] == 2)
                --vf;
            if(v[i] == 3)
            {
                st[vf+1] = B;
                ++vf;
            }
        }
    }
    if(vf>0) return 0;
    return 1;
}

int main()
{
    ifstream fin("perle.in");
    ofstream fout("perle.out");
    fin>>n;
    for(int i=1; i<=n; i++)
    {
        fin>>lg;
        for(int j=1; j<=lg; j++)
            fin>>v[j];

        int ok = 0;
        for(int j=A ; j<=C ; j++)
        {
            st[1] = j;
            if(verif(lg))
                ok = 1;
        }
        fout<<ok<<'\n';
    }
    return 0;
}