Cod sursa(job #1856468)

Utilizator antanaAntonia Boca antana Data 24 ianuarie 2017 22:11:51
Problema Perle Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <cstdio>

#define MAXN 10001

using namespace std;

int s[MAXN], l;

int callC(int);

int callB(int pos)
{
    if(s[pos] == 2)
        if(pos+1 <= l)
            return callB(pos+1);

    if(s[pos] == 1)
        if(pos+4 <= l && s[pos+2] == 3)
            return callC(pos+4);

    return pos;
}

int callC(int pos)
{
    if(s[pos] == 2 && pos == l)
        return pos+1;

    if(s[pos] == 3)
        if(pos+2 <= l)
            return callC(callB(pos+1));

    if(s[pos] == 1)
        if(pos+2 <= l && s[pos+1] == 2)
            return pos+3;

    return pos;
}

int main()
{
    freopen("perle.in", "r", stdin);
    freopen("perle.out", "w", stdout);

    int i, n;

    scanf("%d", &n);

    while(n--)
    {
        scanf("%d", &l);
        for(i=1; i<=l; ++i)
            scanf("%d", &s[i]);

        if(l == 1) printf("1\n");
        else printf("%d\n", (callB(1) == l+1 || callC(1) == l+1));
    }

    return 0;
}