Cod sursa(job #2927350)

Utilizator CosminDMRCosmin Damureanu CosminDMR Data 20 octombrie 2022 10:19:46
Problema Perle Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.83 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("perle.in");
ofstream out("perle.out");
bool A(), B(), C(), verify;
int v[100010];
int nr, n, i;
bool A()
{
    if (i > n)
        return 0;
    if (v[i] == 1 || v[i] == 2 || v[i] == 3)
    {
        i++;
        return 1;
    }
    else return 0;
}
bool B()
{
    if (i > n)
        return 0;
    if (v[i] == 2)
    {
        i++;
        return B();
    }
    else if (v[i] == 1)
    {
        i++;
        int a = A();
        if (a == 0)
            return 0;
        if (v[i] != 3)
            return 0;
        i++;
        a = A();
        if (a == 0)
            return 0;
        return C();
    }
    else return 0;
}
bool C()
{
    if (i > n)
        return 0;
    if (v[i] == 2)
    {
        i++;
        return 1;
    }
    else if (v[i] == 1)
    {
        i++;
        if (v[i] != 2)
        {
            i++;
            return 0;
        }
        else
        {
            i++;
            return A();
        }
    }
    else
    {
        i++;
        int b = B();
        if (b == 0)
            return 0;
        return C();
    }
}
int main()
{
    in >> nr;
    for (in >>nr ; nr--;)
    {
        in >> n;
        for (i = 1; i <= n; i++)
            in >> v[i];
        i = 1;
        verify = A();
        if (verify == true && i > n)
        {
            out << true << '\n';
            continue;
        }
        i = 1;
        verify = B();
        if (verify == true && i > n)
        {
            out << true << '\n';
            continue;
        }
        i = 1;
        verify = C();
        if (verify == true && i > n)
        {
            out << true << '\n';
            continue;
        }
        out << false << '\n';
    }
    return 0;
}