Cod sursa(job #878688)

Utilizator alex_HarryBabalau Alexandru alex_Harry Data 14 februarie 2013 18:12:59
Problema Perle Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.88 kb
#include<fstream>
using namespace std;
ifstream f("perle.in");
ofstream g("perle.out");
int a[11000],sy,rc=1,length=0;
void C();
void B();
void read_number(int& n)
{
    f>>n;
}
void read_array()
{
    int i;
    f>>length;
    for(sy=0;sy<length;sy++)
        f>>a[sy];
}
int ink()
{
    if(sy>=length)
        return(1);
    else
        return(0);
}
int is(int x)
{
    if(a[sy]==x)
    {
        if(ink()==1)
            return(0);
        else
            return(1);
    }
    else
    {
        return(0);
    }
}
void A()
{
    if(!is(1) && !is(2) && !is(3))
       rc=0;
}
void B()
{
    if(is(2))
    {
        sy++;
        B();
        return;
    }
    if(is(1))
    {
        sy++;
        A();
        sy++;
        if(!is(3))
        {
            rc=0;
            return;
        }
        sy++;
        A();
        sy++;
        C();
        return;
    }
    if(sy!=0 && !is(1) && !is(2))
        rc=0;
}
void C()
{
    if(is(2))
    {
        if(sy<length-1)
            sy++;
        return;
    }
    if(is(1))
    {
        sy++;
        if(!is(2))
        {
           rc=0;
           return;
        }
        sy++;
        A();
        if(sy<length-1)
            sy++;
            return;
    }
    if(is(3))
    {
        sy++;
        B();
        sy++;
        C();
        sy++;
        return;
    }
    if(sy==0)
        rc=0;
}
int check()
{
    sy=0;
    rc=1;
    if(length==1)
    {
        A();
        return(rc);
    }
    if(length==3)
    {
        C();
        return(rc);
    }
    if(a[0]==2 || a[0]==1)
    {
        B();
        return(rc);
    }
    if(a[0]==3)
    {
        C();
        return(rc);
    }
}
int main()
{
    int n,i;
    read_number(n);
    for(i=0;i<n;i++)
    {
        read_array();
        g<<check()<<"\n";
    }
}