Cod sursa(job #3260341)

Utilizator Alexbora13Bora Ioan Alexandru Alexbora13 Data 1 decembrie 2024 19:20:33
Problema Perle Scor 10
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 11;

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

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

int t;
int n, v[NMAX+1], curr;

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

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

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

int main()
{
    fin >> t;
    while(t--)
    {
        fin >> n;
        for(int i=1; i<=n; i++)
            fin >> v[i];
        curr = 1;
        int ok1 = A() && curr == n+1;
        curr = 1;
        int ok2 = B() && curr == n+1;
        curr = 1;
        int ok3 = C() && curr == n+1;
        fout << ((ok1 || ok2 || ok3)?1:0) << '\n'; 
    }
    return 0;
}