Cod sursa(job #2145728)

Utilizator bogdi1bogdan bancuta bogdi1 Data 27 februarie 2018 16:22:21
Problema Perle Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.87 kb
#include <cstdio>

using namespace std;
int v[10005];
int l;
int ok=0;
int poz;
bool transforma();
bool transformb();
bool transformc();
bool transforma()
{
    if(poz<=l){
        poz++;
        return 1;
    }
    else
        return 0;
}
bool transformb()
{
    if(ok==1)
        return 0;
    else{
        if(poz>l){
            ok=1;
        }
        if(v[poz]==1){
            poz++;
            if(transforma()==1){
                if(v[poz]==3){
                    poz++;
                    if(transforma()==1){
                        if(transformc()==1){
                            return 1;
                        }
                        else
                            ok=1;
                    }
                    else
                        ok=1;
                }
                else
                    ok=1;
            }
            else
                ok=1;
        }
        else{
            if(v[poz]==2){
                poz++;
                return transformb();
            }
            else
               ok=1;
        }
        if(ok==1)
            return 0;
    }
}
bool transformc()
{
    if(ok==1)
        return 0;
    else{
        if(poz>l)
            ok=1;
        if(v[poz]==1){
            poz++;
            if(v[poz]==2){
                poz++;
                if(transforma()==1){
                    return 1;
                }
                else
                    ok=1;
            }
            else
                ok=1;
        }
        else{
            if(v[poz]==2){
                poz++;
                return 1;
            }
            else{
                if(v[poz]==3){
                    poz++;
                    if(transformb()==1){
                        if(transformc()==1){
                            return 1;
                        }
                        else
                            ok=1;
                    }
                    else
                        ok=1;
                }
            }
        }
        if(ok==1)
            return 0;
    }
}
int main()
{   freopen("perle.in", "r",stdin);
    freopen("perle.out", "w",stdout);
    int n,i,j;
    scanf("%d\n", &n);
    for(i=1; i<=n; i++){
        scanf("%d ", &l);
        for(j=1; j<=l; j++)
            scanf("%d", &v[j]);
        ok=0;
        poz=1;
        transforma();
        if(ok==0 && poz>l)
            printf("1\n");
        else{
            ok=0;
            poz=1;
            transformb();
            if(ok==0 && poz>l)
                printf("1\n");
            else{
                ok=0;
                poz=1;
                transformc();
                if(ok==0 && poz>l)
                    printf("1\n");
                else
                    printf("0\n");
            }
        }
    }
    return 0;
}