Cod sursa(job #2601968)

Utilizator MirunaStefaniaLupascu Miruna-Stefania MirunaStefania Data 15 aprilie 2020 16:17:25
Problema Perle Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.96 kb
#include <iostream>
#include<fstream>
#define N 10005
using namespace std;
ifstream fin("perle.in");
ofstream fout("perle.out");

int a[N], n;
bool adev;
int poz;

void C();

void A()
{
    //cout << 'a';
    if(poz > n) adev = false;
    if(a[poz] != 1 && a[poz] != 2 &&a[poz] != 3)adev = false;
}
void B()
{
    //cout << 'b';
    if(poz > n)adev = false;
    if(a[poz] == 2)
    {
        poz++;
        B();

    }
    else
    {
        if(a[poz] != 1)adev = false;
        poz++;
        A();
        poz++;
        if(a[poz] != 3)adev = false;
        poz++;
        A();
        poz++;
        C();


    }
}

void C()
{
    //cout << 'c';
    if(poz > n)adev = false;
    if(poz == n &&a[poz] != 2) adev = 0;
    else if(a[poz] == 3)
    {
        poz++;
        B();
        poz++;
        C();

    }
    else if(a[poz] == 1)
    {
        poz++;
        if(a[poz] != 2)adev = false;
        poz++;
        A();
    }
    else adev = false;
}

void solve()
{
    int i;
    if(n == 1) A();
    else
    {
        if(a[1] == 2)
        {
            poz++;
            B();
        }
        else if(a[1] == 3)
        {
            poz++;
            B();
            C();

        }
        else
        {
            if(a[2] == 2 && n == 3)
            {
                poz++;
                A();
            }
            else
            {
                poz++;
                A();
                poz++;
                if(a[poz] != 3)adev = false;
                poz++;
                A();
                poz++;
                C();

            }
        }
    }
}

int main()
{
    int i, x, j;
    fin >> x;
    for(i = 1; i <= x; ++ i)
    {

        fin >> n;
        for(j = 1;j <= n ;++j)
            fin >> a[j];
        adev = true;
        poz = 1;
        solve();
        fout << adev <<"\n";
        //cout << poz << " ";
    }


    return 0;
}