Cod sursa(job #2298459)

Utilizator Vaida_Radu_AndreiVaida Radu Andrei Vaida_Radu_Andrei Data 8 decembrie 2018 10:39:33
Problema Perle Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.84 kb
#include <cstdio>

using namespace std;
FILE* FIN=freopen("perle.in","r",stdin);
FILE* FOUT=freopen("perle.out","w",stdout);

int v[16384],n;

void cit()
{
    int i;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&v[i]);
}
void af(int k)
{
    printf("%d\n",k);
}
/**
void b3(int &p)
{
    p=-1;
}
void c1(int &p)
{
    if(v[p+1]==2)
        p+=3;
    else
        p=-1;
}
void c2(int &p)
{
    p++;
}
void c3(int &p)
{
    p++;
    if(v[p]==1)
        b1(p);
    else if(v[p]==2)
        b2(p);
    else
        b3(p);

    if(p==-1)
        return;

    if(v[p]==1)
        c1(p);
    else if(v[p]==2)
        c2(p);
    else
        c3(p);
}
void b1(int &p)
{
    if(v[p+2]==3)
        p+=4;
    else
    {
        p=-1;
        return;
    }
    if(v[p]==1)
        c1(p);
    else if(v[p]==2)
        c2(p);
    else
        c3(p);
}
void b2(int &p)
{
    p++;
    if(v[p]==1)
        b1(p);
    else if(v[p]==2)
        b2(p);
    else
        b3(p);
}
*/
void letter(int &p,char c)
{
    if(c=='b')
    {
        if(v[p]==1)
        {
            if(v[p+2]==3)
                p+=4;
            else
            {
                p=-1;
                return;
            }
            if(v[p]==1)
                letter(p,'c');
            else if(v[p]==2)
                letter(p,'c');
            else
                letter(p,'c');
        }
        else if(v[p]==2)
        {
            p++;
            if(v[p]==1)
                letter(p,'b');
            else if(v[p]==2)
                letter(p,'b');
            else
                letter(p,'b');
        }
        else
            p=-1;
    }
    else
    {
        if(v[p]==1)
        {
            if(v[p+1]==2)
                p+=3;
            else
                p=-1;
        }
        else if(v[p]==2)
        {
            p++;
        }
        else
        {
            p++;
            if(v[p]==1)
                letter(p,'b');
            else if(v[p]==2)
                letter(p,'b');
            else
                letter(p,'b');

            if(p==-1)
                return;

            if(v[p]==1)
                letter(p,'c');
            else if(v[p]==2)
                letter(p,'c');
            else
                letter(p,'c');
        }
    }
}
void play()
{
    int p=0;
    cit();
    if(n==1)
    {
        af(1);
        return;
    }
    if(v[0]==1)
    {
        if(v[1]==2&&n==3)
        {
            af(1);
            return;
        }
        letter(p,'b');
    }
    else if(v[0]==2)
        letter(p,'b');
    else
        letter(p,'c');

    if(p==n)
        af(1);
    else
        af(0);
}
int main()
{
    int i,k;
    scanf("%d",&k);
    for(i=0;i<k;i++)
        play();
    return 0;
}