Cod sursa(job #2457354)

Utilizator driver71528@gmail.comTerec Andrei-Sorin [email protected] Data 17 septembrie 2019 15:23:29
Problema Perle Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <iostream>
#include <fstream>
#define MaxL 10001
using namespace std;

ifstream f("perle.in");
ofstream g("perle.out");
int l,i,n;
short x[MaxL];

bool perlaB();
bool perlaC()
{
    if(i>l)
        return false;
    switch(x[i])
    {
    case 1:
        if(i+2<=l && x[i]==1 && x[i+1]==2)
        {
            i+=3;
            return true;
        }
        else return false;
        break;
    case 2:
        return x[i++]==2;
        break;
    default:
        i++;
        if(perlaB())
            return perlaC();
        else return false;

    }
}
bool perlaB()
{
    if(i>l)
        return false;
    while(x[i]==2)
        i++;
    if(i+4<=l)
    {
        int j=i;
        i+=4;
        return x[j]==1 && x[j+2]==3 && perlaC();
    }
    else
        return false;
}
bool solve()
{
    i=1;
    if(l==1) ///perla A
        return true;
    if(l==3 && x[1]==1 && x[2]==2) ///Perla C
        return true;
    if(x[1]==3)
    {
        return perlaC() && i-1==l;
    }
    else
        return perlaB() && i-1==l;
}

int main()
{
    f>>n;
    for(int i=1;i<=n;i++)
    {
        f>>l;
        for(int i=1;i<=l;i++)
            f>>x[i];
        g<<solve()<<'\n';
    }
    f.close();
    g.close();
    return 0;
}