Cod sursa(job #1119259)

Utilizator gramatovici_paulGramatovici Paul gramatovici_paul Data 24 februarie 2014 16:29:11
Problema Perle Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.17 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("perle.in");
ofstream out("perle.out");

int w[11111],v[11111];

bool merge(int start, int n)
{
    int i,nrC=0;
    bool ok=true;
    for(i=1;i<=n+1;++i)
    {
        w[i]=0;
    }
    w[1]=start;
    for(i=1;i<=n;++i)
    {
        if(w[i]==0)
        {
            if(nrC!=0)
            {
                w[i]=6;
                --nrC;
            }
            else
            {
                ok=false;
                break;
            }
        }
        if(w[i]>=1 && w[i]<=3)
        {
            if(w[i]!=v[i])
            {
                ok=false;
                break;
            }
            continue;
        }
        if(w[i]==4)
        {
            w[i]=v[i];
            continue;
        }
        if(w[i]==5)
        {
            if(v[i]==2)
            {
                w[i]=2;
                w[i+1]=5;
                continue;
            }
            if(v[i]==1)
            {
                w[i]=1;
                w[i+1]=4;
                w[i+2]=3;
                w[i+3]=4;
                w[i+4]=6;
                continue;
            }
            ok=false;
            break;
        }
        if(w[i]==6)
        {
            if(v[i]==2)
            {
                w[i]==2;
                continue;
            }
            if(v[i]==1)
            {
                w[i]=1;
                w[i+1]=2;
                w[i+2]=4;
            }
            if(v[i]==3)
            {
                w[i]=3;
                w[i+1]=5;
                nrC++;
            }
        }
    }
    if(ok==true && w[n+1]==0 && nrC==0)
    {
        return true;
    }
    return false;
}

void solve()
{
    int i,n;

    in>>n;
    for(i=1;i<=n;++i)
    {
        in>>v[i];
    }
    // 1 2 3
    // A -> 4
    // B -> 5
    // C -> 6
    if(merge(4,n) || merge(5,n) || merge(6,n))
    {
        out<<1<<"\n";
    }
    else
    {
        out<<0<<"\n";
    }


}

int main()

{
    int i,t;
    in>>t;
    for(i=1;i<=t;++i)
    {
        solve();
    }
    return 0;
}