Cod sursa(job #1500582)

Utilizator vancea.catalincatalin vancea.catalin Data 12 octombrie 2015 10:39:10
Problema Perle Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.99 kb
#include<iostream>
#include<fstream>
#include<cstring>
#define dm 100010
using namespace std;
fstream fin("perle.in",ios::in),fout("perle.out",ios::out);
int n,m;
char x[dm],y[dm],aux;
int f(int ly)
{
    int lx=1,i,j;
    while(lx<=m&&ly>0)
    {
        if(y[ly]==x[lx]||y[ly]=='a')//aaaaaaaaaaaa
        {
            lx++;
            ly--;
            continue ;
        }
        if(y[ly]<'a')
        {
            return 0;
        }
        if(y[ly]=='b')//bbbbbbbbbbb
        {
            if(x[lx]=='2')
            {
                lx++;
            }
            else
            {
                if(x[lx]=='1')
                {
                    lx++;
                    y[ly++]='c';
                    y[ly++]='a';
                    y[ly++]='3';
                    y[ly]='a';
                }
                else
                {
                    return 0;
                }
            }
            continue ;
        }
        if(y[ly]=='c')//cccccccccccccc
        {
            if(x[lx]=='2')
            {
                lx++;
                ly--;
            }
            else
            {
                if(x[lx]=='3')
                {
                    lx++;
                    y[ly++]='c';
                    y[ly]='b';
                }
                else
                {
                   if(x[lx]=='1')
                    {
                        lx++;
                        y[ly++]='a';
                        y[ly]='2';
                    }
                }
            }
            continue ;
        }
    }
    if(lx==m+1&&ly==0)return 1;
    return 0;
}
int main()
{
    int j,i,ly,ok;
    char k;
    fin>>n;
    for(i=1;i<=n;i++)
    {
        fin>>m;
        for(j=1;j<=m;j++)fin>>x[j];
        ok=0;
        for(k='a';k<'d';k++)
        {
            ly=1;
            y[ly]=k;
            if(f(ly))ok=1;
        }
        fout<<ok<<"\n";
    }
    return 0;
}