Cod sursa(job #3278859)

Utilizator Alexbora13Bora Ioan Alexandru Alexbora13 Data 20 februarie 2025 21:50:42
Problema Evaluarea unei expresii Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.46 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 12;

int q;
int n;
int v[NMAX + 1];
int p;

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

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

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

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

int main()
{
    fin >> q;
    while (q--)
    {
        fin >> n;
        for (int i = 1; i <= n; i++)
            fin >> v[i];

        p = 1;
        int ok1 = A() && (p == n + 1);

        p = 1;
        int ok2 = B() && (p == n + 1);

        p = 1;
        int ok3 = C() && (p == n + 1);

        fout << (ok1 || ok2 || ok3) << '\n';
    }
    return 0;
}