Cod sursa(job #3270613)

Utilizator Mihai_999Diaconeasa Mihai Mihai_999 Data 23 ianuarie 2025 20:00:50
Problema Perle Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <iostream>
#include <fstream>
#define nl '\n'

using namespace std;

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

const int NMAX = 1e4+5;

int n, v[NMAX], i;

bool A();
bool B();
bool C();

bool A()
{
    if (i == n+1)
        return 0;
    i++;
    return 1;
}

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

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

void solve()
{
    bool ok = 0;
    fin >> n;
    for (int x = 1; x <= n; x++)
        fin >> v[x];
    i = 1;
    ok = (A() && i == n+1);
    i = 1;
    if (!ok)
        ok = (B() && i == n+1);
    i = 1;
    if (!ok)
        ok = (C() && i == n+1);
    if (ok)
        fout << 1;
    else
        fout << 0;
    fout << nl;
    return;
}

int main()
{
    int t;
    fin >> t;
    while (t--)
        solve();
    return 0;
}