Cod sursa(job #1354359)

Utilizator TataruTataru Mihai Tataru Data 21 februarie 2015 19:39:30
Problema Perle Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.87 kb
#include <iostream>
#include <fstream>
#define inFile "perle.in"
#define outFile "perle.out"

using namespace std;

int n,k,x,pas;

void perle(int v[],int lucru[])
{
    if(x==0) return;
    if(lucru[x]=='B')
    {
        x--;
        if(v[pas]==2)
        {
            pas++; x++; lucru[x]='B';if(pas==k){x=0;pas--;}perle(v,lucru);return;
        }
        if(v[pas]==1 && v[pas+2]==3)
        {
            pas+=4; x++; lucru[x]='C'; if(pas==k) {x=0;pas--;} perle(v,lucru);return;
        }

    }
    else
    if(lucru[x]=='C')
    {
        x--;
        if(v[pas]==2)
        {
            pas+=1;
            if(pas==k+1) pas--;
            perle(v,lucru);return;
        }
        if(v[pas]==3)
        {
            pas++; x+=2; lucru[x-1]='C'; lucru[x]='B';if(pas==k) {x=0;pas-=2;} perle(v,lucru);return;
        }
        if(v[pas]==1 && v[pas+1]==2)
        {
            pas+=3;
            if(pas==k+1) pas--;
            perle(v,lucru);return;
        }
    }

}

int main()
{
    int i,j;

    ifstream fin(inFile);
    ofstream fout(outFile);

    fin>>n;
    for(i=1;i<=n;i++)
    {
        int v[10001]={0},lucru[10001]={0};
        x=0;
        pas=1;
        fin>>k;
        for(j=1;j<=k;j++) fin>>v[j];
        switch(k)
        {
            case 1: fout<<1<<"\n"; x=1; break;
            case 2: fout<<0<<"\n"; break;
            case 3: if(v[1]==1 && v[2]==2) fout<<1<<"\n"; else fout<<0<<"\n"; break;
        }
        if(k>3)
        {
            switch(v[1])
            {
                case 3: x++; lucru[x]='C'; perle(v,lucru); break;
                case 1:
                case 2: x++; lucru[x]='B'; perle(v,lucru);
            }
            if(x==0 && pas==k) fout<<1<<"\n";
            else fout<<0<<"\n";
            cout<<x<<pas;
        }
    }

    fin.close();
    fout.close();
}