Cod sursa(job #3196682)

Utilizator AlexanderCernyCernaianu Alexandru AlexanderCerny Data 24 ianuarie 2024 16:47:48
Problema Perle Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.02 kb
/// Aceasta sursa este pentru problema
/// https://www.infoarena.ro/problema/perle
/// Punctaj: 100
/// Grupa de seniori - Clasa a X-a

#include <fstream>
using namespace std;
int v[10010];
int n, t, i, A(), B(), C(), T;
int A()
{
    if (i==n+1)
        return 0;
    if (v[i] == 1 || v[i] == 2 || v[i] == 3)
    {
        i++;
        return 1;
    }
    else
        return 0;
}
int B()
{
    if (i==n+1)
        return 0;
    if (v[i] == 2)
    {
        i++;
        return B();
    }
    else if (v[i] == 1)
    {
        i++;
        int aux = A();
        if (aux == 0)
            return 0;
        if (v[i] != 3)
            return 0;
        i++;
        aux = A();
        if (aux == 0)
            return 0;
        return C();
    }
    else
        return 0;
}
int C()   /// da rezultat 1 daca C poate genera restul de
{
    /// sir incepand cu valoarea curenta a lui i
    if (i==n+1)
        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 aux = B();
        if (aux == 0)
            return 0;
        return C();
    }
}
int main ()
{
    ifstream fin ("perle.in");
    ofstream fout("perle.out");
    for (fin>>T; T--; )
    {
        fin>>n;
        for (i=1; i<=n; i++)
            fin>>v[i];
        i = 1;
        int rez = A();
        if (rez == 1 && i == n+1)
        {
            fout<<"1"<<'\n';
            continue;
        }
        i = 1;
        rez = B();
        if (rez == 1 && i == n+1)
        {
            fout<<"1"<<'\n';
            continue;
        }
        i = 1;
        rez = C();
        if (rez == 1 && i == n+1)
        {
            fout<<"1"<<'\n';
            continue;
        }
        fout<<"0"<<'\n';
    }
    return 0;
}