Cod sursa(job #1119131)

Utilizator mihail.jianuJianu Mihail mihail.jianu Data 24 februarie 2014 15:31:05
Problema Perle Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.73 kb
# include <cstdio>

const int N = 10000;

int v [N + 1];
int n, t, p;

void init ()
{
    freopen ("perle.in", "r", stdin);
    freopen ("perle.out", "w", stdout);
    scanf ("%d", & t);
}

void citeste ()
{
    int i;

    scanf ("%d", & n);

    for (i = 1; i <= n; i ++)
        scanf ("%d", & v [i]);
}

bool a ()
{
    if (p <= n)
    {
        p ++;

        return true;
    }

    p ++;

    return false;
}

bool c ();

bool b ()
{
    if (p > n)
        return false;

    if (v [p] == 2)
    {
        p ++;

        return  b ();
    }

    if (v [p] == 1)
    {
        p ++;

        if (a ())
            if (v [p] == 3)
            {
                p ++;

                if (a ())
                    return c ();
            }
    }

    return false;
}

bool c ()
{
    if (p > n)
        return false;

    if (v [p] == 2)
    {
        p ++;

        return true;
    }

    if (v [p] == 3)
    {
        p ++;

        if (b ())
            return c ();
    }

    p ++;

    if (v [p] == 2)
    {
        p ++;

        return a ();
    }

    return false;
}

void rezolva ()
{
    p = 1;

    if (a ())
        if (p == n + 1)
        {
            printf ("1\n");

            return;
        }

    p = 1;

    if (b ())
        if (p == n + 1)
        {
            printf ("1\n");

            return;
        }

    p = 1;

    if (c ())
        if (p == n + 1)
        {
            printf ("1\n");

            return;
        }

    printf ("0\n");
}

int main ()
{
    int i;

    init ();

    for (i = 1; i <= t; i ++)
    {
        citeste ();
        rezolva ();
    }

    return 0;
}