Cod sursa(job #445390)

Utilizator SpiderManSimoiu Robert SpiderMan Data 23 aprilie 2010 17:56:53
Problema Perle Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <cstdio>
#define MAX 10005

int V[MAX], L, T;

int perlab(int);
int perlac(int);
int solve(void);
void citire(void);

int main()
{
    freopen("perle.in","r",stdin);
    freopen("perle.out","w",stdout);
    scanf("%d\n",&T);
    while (T--)
        printf("%d\n",solve());
}

void citire()
{
    scanf("%d",&L);
    for (int i = 0; i < L; ++i) scanf("%d",&V[i]);
}
int solve() // A -> 1 | 2 | 3
{
    citire();
    if(L == 1)
        return 1;
    if(L == 2)
        return 0;
    if(V[0] == 3)
        return perlac(0);
    return perlab(0);
}
int perlab(int K) // B -> 2B | 1A3AC
{
    if(V[K] == 2)
        return perlab(K + 1);
    if(V[K] == 1 && V[K + 2] == 3)
        return perlac(K + 4);
    return perlac(K + 1);
}

int perlac(int K) // C -> 2 | 3BC | 12A
{
    if(V[K] == 2)
    {
        if(K == L - 1)
            return 1;
        return perlac(K + 1);
    }
    if(V[K] == 1 && V[K + 1] == 2)
    {
        if(K + 3 == L)
            return 1;
        return perlac(K + 3);
    }
    if(V[K] == 3)
        return perlab(K + 1);
    return 0;
}