Cod sursa(job #3241098)

Utilizator Alexbora13Bora Ioan Alexandru Alexbora13 Data 26 august 2024 14:09:49
Problema Perle Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 10001;

int q;
int i, n, v[NMAX+1];

int A(), B(), C();

int A()
{
    if(i == n+1)
        return 0;
    if(v[i] == 1 || v[i] == 2 || v[i] == 3)
    {
        i++;
        return 1;
    }
    return 0;
}

int B()
{
    if(i == n+1)
        return 0;
    if(v[i] == 2)
    {
        i++;
        return B();
    }
    else if(v[i] == 1)
    {
        i++;
        int okA = A();
        if(okA == 0)return 0;
        if(v[i] != 3)return 0;
        i++;
        okA = A();
        if(okA == 0)return 0;
        return C();
    }
    return 0;
}

int C()
{
    if(i == n+1)
        return 0;
    if(v[i] == 2)
    {
        i++;
        return 1;
    }
    else if(v[i] == 3)
    {
        i++;
        int okB = B();
        if(okB == 0)return 0;
        return C();
    }
    else if(v[i] == 1)
    {
        i++;
        if(v[i] != 2){return 0;}
        else {i++; return A();}

    }
    return 0;
}

int main()
{
    fin >> q;
    while(q--)
    {
        fin >> n;
        for(int j=1; j<=n; j++)
            fin >> v[j];
        i = 1; int adv = A();
        if(i == n+1 && adv){fout << 1 << '\n'; continue;}
        i = 1;  adv = B();
        if(i == n+1 && adv){fout << 1 << '\n'; continue;}
        i = 1;  adv = C();
        if(i == n+1 && adv){fout << 1 << '\n'; continue;}
        fout << 0 << '\n';
    }
    return 0;
}