Cod sursa(job #2256839)

Utilizator IoanStoicaStoica Ioan IoanStoica Data 9 octombrie 2018 10:45:49
Problema Perle Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 4.16 kb
#include <bits/stdc++.h>

using namespace std;
char r[10001],v[10001];
int main()
{
    ifstream f("perle.in");
    ofstream g("perle.out");
    int t,T;
    bool functional;
    int i,DimMv,a,DimMr,k,ct;
    f>>T;
    for(t=1; t<=T; t++) ///Pt.fiecare test
    {
        f>>DimMr;
        for(i=0;i<=10000;i++)
            r[i]=0;
        for(i=1; i<=DimMr; i++)
        {
            f>>a;
            r[i]=a;///Vector de char
        }
        for(i=1; i<=DimMr; i++)
            cout<<int(r[i]);
        cout<<"\n";
        if(DimMr==1)///solutia este A
            g<<"1\n";
        else
            for(k=1; k<=2; k++)
            {
                for(i=0;i<=10000;i++)
                    v[i]=0;
                r[0]=v[0]=':';
                if(k==1)
                    v[1]='B';///Incercam sa plecam de la B sau de la C
                else v[1]='C';
                ct=1;
                DimMv=1;
                functional=true;
                while(strcmp(v,r)!=0)
                {
                    for(i=1; i<=DimMv; i++)
                    if(v[i]>10)
                        cout<<v[i];
                    else
                        cout<<int(v[i]);
                    cout<<"\n";
                    while(v[ct]<10 && ct<=DimMv)
                        ct++;///In sirul pe care il formam ( v) mergem la prima litera
                    if(ct>DimMv || DimMv>DimMr)
                        break;
                    if(v[ct]=='A')
                    {
                        v[ct]=r[ct];///Il tranformam pe A in cifra corespunzatoare
                        ct++;
                    }
                    else if(v[ct]=='B')
                    {
                        if(r[ct]==1)
                        {
                            DimMv=DimMv+4;
                            for(i=DimMv;i>=ct+5;i--)
                                v[i]=v[i-4];///Mutam vectorul cu 4 casute la dreapta
                                            /// pentru a avea loc completarea lui B
                            v[ct]=1;ct++;
                            v[ct]='A';///Ducem ct-ul la prima litera
                            v[ct+1]=3;
                            v[ct+2]='A';
                            v[ct+3]='C';
                        }
                        else if(r[ct]==2)
                        {
                            DimMv++;
                            for(i=DimMv;i>=ct+2;i--)
                                v[i]=v[i-1];
                            v[ct]=2;ct++;
                            v[ct]='B';
                        }
                        else if(r[ct]==3)
                        {
                            functional=false;
                            break;
                        }
                    }
                    else if(v[ct]=='C')
                    {
                        if(r[ct]==1)
                        {
                            DimMv=DimMv+2;
                            for(i=DimMv;i>=ct+3;i--)
                                v[i]=v[i-2];
                            v[ct]=1;ct++;
                            v[ct]=2;ct++;
                            v[ct]='A';
                        }
                        else if(r[ct]==2)
                        {
                            v[ct]=2;
                            ct++;
                        }
                        else if(r[ct]==3)
                        {
                            DimMv=DimMv+2;
                            for(i=DimMv;i>=ct+3;i--)
                                v[i]=v[i-2];
                            v[ct]=3;ct++;
                            v[ct]='B';
                            v[ct+1]='C';
                        }
                    }




                }
                if(strcmp(v,r)==0)
                {
                    g<<"1\n";
                    break;
                }

                else
                {
                    if(k==1)functional=true;
                    else
                    g<<"0\n";
                }
            }


    }


















    f.close();
    g.close();
}