Cod sursa(job #1304894)

Utilizator wGEORGEWGeorge Cioti wGEORGEW Data 29 decembrie 2014 13:24:27
Problema Perle Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.81 kb
#include <fstream>
#include <cstring>

using namespace std;
ifstream fin("perle.in");
ofstream fout("perle.out");
int n,m,i,j,ok,x;
char v1[3][10]={"1","2","3"};
char v2[3][10]={"2B","1A3AC"};
char v3[3][10]={"2","3BC","12A"};
char s[10020],*p,sol[10020];

int main()
{
    fin>>n;
    for (i=1;i<=n;i++)
    {
        fin>>m;
        for (j=0;j<m;j++)
        {
            fin>>x;
            if (x==1)
                s[j]='1';
            else if (x==2)
                s[j]='2';
            else if (x==3)
                s[j]='3';
        }
        s[m]=NULL;
        sol[0]=NULL;
        for (j=0;j<m;j++)
        {
            if (sol[j]==0)
            {
                if (j==0)
                {
                    if (s[j]=='1')
                    {
                        if (m-j==1)
                            strcpy(sol,v1[0]);
                        else if (m-j==3)
                            strcpy(sol,v3[2]);
                        else if (m-j>=5)
                            strcpy(sol,v2[1]);
                        else ok=-1;
                    }
                    else if (s[j]=='2')
                    {
                        if (m-j==1)
                            strcpy(sol,v3[0]);
                        else if (m-j>=2)
                            strcpy(sol,v2[0]);
                        else ok=-1;
                    }
                    else if (s[j]=='3')
                    {
                        if (m-j==1)
                            strcpy(sol,v1[2]);
                        else if (m-j>=3)
                            strcpy(sol,v3[1]);
                        else ok=-1;
                    }
                }
                else
                {
                    ok=-1;
                    break;
                }
            }
            else if (sol[j]=='A')
            {
                if (s[j]=='1')
                    sol[j]='1';
                else if (s[j]=='2')
                    sol[j]='2';
                else if (s[j]=='3')
                    sol[j]='3';
            }
            else if (sol[j]=='B')
            {
                if (s[j]=='1')
                {
                    if (sol[j+1]!=NULL)
                        *p=sol[j+1];
                    else
                        p=NULL;
                    strcpy(sol+j,v2[1]);
                    if (p!=NULL)
                        strcat(sol,p);
                }
                else if (s[j]=='2')
                {
                    if (sol[j+1]!=NULL)
                        *p=sol[j+1];
                    else
                        p=NULL;
                    strcpy(sol+j,v2[0]);
                    if (p!=NULL)
                        strcat(sol,p);
                }
                else ok=-1;
            }
            else if (sol[j]=='C')
            {
                if (s[j]=='1')
                {
                    if (sol[j+1]!=NULL)
                        *p=sol[j+1];
                    else
                        p=NULL;
                    strcpy(sol+j,v3[2]);
                    if (p!=NULL)
                        strcat(sol,p);
                }
                else if (s[j]=='2')
                    sol[j]='2';
                else if (s[j]=='3')
                {
                    if (sol[j+1]!=NULL)
                        *p=sol[j+1];
                    else
                        p=NULL;
                    strcpy(sol+j,v3[1]);
                    if (p!=NULL)
                        strcat(sol,p);
                }
                else ok=-1;
            }
            else if (sol[j]==s[j])
                ok=1;
        }
        if (strcmp(sol,s)==0)
            fout<<"1\n";
        else
            fout<<"0\n";
    }
    return 0;
}