Cod sursa(job #2205760)

Utilizator georgerapeanuRapeanu George georgerapeanu Data 20 mai 2018 11:03:50
Problema Perle Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.07 kb
#include <cstdio>

using namespace std;

FILE *f = fopen("perle.in","r");
FILE *g = fopen("perle.out","w");

int V[10001],N,ind;
int T;

bool A();
bool B();
bool C();


bool A(){
    if(ind <= N && V[ind] == 1 || V[ind] == 2 || V[ind] == 3){
        ind++;
        return 1;
    }
    return 0;
}

bool B(){
    if(ind <= N){
        if(V[ind] == 2){
            ind++;
            return B();
        }
        else{
            if(V[ind] == 1){
                ind++;
                if(A()){
                    if(ind <= N && V[ind] == 3){
                        ind++;
                        if(A()){
                            return C();
                        }
                        else{
                            return 0;
                        }
                    }
                    else{
                        return 0;
                    }
                }
                else{
                    return 0;
                }
            }
            else{
                return 0;
            }
        }
    }
    else{
        return 0;
    }
}

bool C(){
    if(ind <= N && V[ind] == 2){
        ind++;
        return 1;
    }
    if(ind <= N && V[ind] == 3){
        ind++;
        if(!B()){
            return 0;
        }
        return C();
    }
    if(ind <= N && V[ind] == 1){
        ind++;
        if(ind <= N && V[ind] == 2){
            ind++;
            return A();
        }
    }
    return 0;
}

int main(){

    fscanf(f,"%d",&T);

    while(T--){
        fscanf(f,"%d",&N);
        for(int i = 1;i <= N;i++){
            fscanf(f,"%d",&V[i]);
        }
        ind = 1;
        if(A() && ind > N){
            fputs("1\n",g);
            continue;
        }
        ind = 1;
        if(B() && ind > N){
            fputs("1\n",g);
            continue;
        }
        ind = 1;
        if(C() && ind > N){
            fputs("1\n",g);
            continue;
        }
        fputs("0\n",g);
    }

    fclose(f);
    fclose(g);

    return 0;
}