Cod sursa(job #2174176)

Utilizator EricEric Vilcu Eric Data 16 martie 2018 11:05:12
Problema Perle Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.91 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("perle.in");
ofstream g("perle.out");
int i,n,k,N;
char j;
char a[10007],b[10007],c[10007];
bool V()
{
    f>>n;
    if(n==1)return 1;
    for(i=0;i<n;++i)
    {
        f>>k;
        a[i]=k;
    }
    if(a[0]==2)c[0]='b';
    else if(a[0]==1){if(n!=3)c[0]='b';
                     else c[0]='c';}
    else if(a[0]==3)c[0]='b';
    else return 0;
    k=1;i=0;j=0;
    while(i<n&&k>0)
    {
        --k;
        j=c[k];c[k]=0;
        switch(j)
        {
            case 1:case 2:case 3:
                b[i]=j;
                if(b[i]!=a[i]){return 0;}
                ++i;break;
            case 'a':b[i]=a[i];++i;break;
            case 'c':if(a[i]==1)
                    {
                        b[i]=1;
                        c[k]='a';++k;
                        c[k]=2;++k;
                        ++i;break;
                    }
                    if(a[i]==2)
                    {
                        b[i]=2;++i;break;
                    }
                    if(a[i]==3)
                    {
                        b[i]=3;
                        c[k]='c';++k;
                        c[k]='b';++k;
                        ++i;break;
                    }
            case 'b':if(a[i]==3){return 0;}
                    if(a[i]==2)
                    {
                        b[i]=2;
                        c[k]='b';++k;
                        ++i;break;
                    }
                    if(a[i]==1)
                    {
                        b[i]=1;
                        c[k]='c';++k;
                        c[k]='a';++k;
                        c[k]=3;++k;
                        c[k]='a';++k;
                        ++i;break;
                    }
        }
    }
    if(k>0||i<n)return 0;
    return 1;
}
int main()
{
    f>>N;
    for(;N>0;--N)g<<V()<<'\n';
}