Cod sursa(job #1060006)

Utilizator mvcl3Marian Iacob mvcl3 Data 17 decembrie 2013 13:55:20
Problema Perle Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>

#define in "perle.in"
#define out "perle.out"
#define Max_Size 10009

std :: ifstream f(in);
std :: ofstream g(out);

int T, N, idx;
int A[Max_Size];

inline void Read_Data()
{
    f >> N;
    for(int i = 1; i <= N; ++i) f >> A[i];
}

int B();
int C();


int C()
{
    if(A[idx] == 2 && idx <= N)
    {
        ++idx;
        return 1;
    }

    if(A[idx] == 3)
    {
        ++idx;
        if(B() && idx <= N) return C();
    }

    if(A[idx] == 1 && A[idx + 1] == 2 && idx + 2 <= N)
    {
        idx += 3;
        return 1;
    }

    return 0;
}

int B()
{
    if(A[idx] == 2)
    {
        ++idx;
        if(idx <= N)    return B();
    }
    if(A[idx] == 1 && A[idx + 2] == 3 && idx + 4 <= N)
    {
        idx += 4;
        return C();
    }

    return 0;
}

int Solve()
{
    if(N == 1)  return 1;

    if(A[idx] == 2 || (A[idx] == 1 && A[idx + 2] == 3 && N >= 5))    return B();

    return C();
}

int main()
{
    f >> T;

    while(T --)
    {
        Read_Data();
        idx = 1;
        g << Solve() << '\n';
    }

    g.close();
    return 0;
}