Cod sursa(job #2152381)

Utilizator mirceaisherebina mircea mirceaishere Data 5 martie 2018 14:45:51
Problema Perle Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.48 kb
#include <fstream>
using namespace std;
ifstream fin("perle.in");
ofstream fout("perle.out");

int i, j, n, m, ok, imax;

int v[10001];

void a(int &ok, int &i, int &imax);
void b(int &ok, int &i, int &imax);
void c(int &ok, int &i, int &imax);

void a(int &ok, int &i, int &imax){
    if(v[i] && ok==1){
        i++;
        ok = 1;
    }else{
        ok = 0;
    }
}

void b(int &ok, int &i, int &imax){
    if(v[i]==1 && ok==1){
        i++;
        if(ok==1){
            imax=i;
        }
        a(ok, i, imax);
        if(ok==1){
            imax=i;
        }
        if(v[i]!=3 && ok==1){
            ok=0;
        }
        i++;
        if(ok==1){
            imax=i;
        }
        a(ok, i, imax);
        if(ok==1){
            imax=i;
        }
        c(ok, i, imax);
        if(ok==1){
            imax=i;
        }
    }
    if(v[i]==2 && ok==1){
        i++;
        if(ok==1){
            imax=i;
        }
        b(ok, i, imax);
        if(ok==1){
            imax=i;
        }
    }
    if(v[i]==3 && ok==1){
        ok = 0;
    }
}

void c(int &ok, int &i, int &imax){
    if(v[i]==1){
        i++;
        if(ok==1){
            imax=i;
        }
        if(v[i]!=2)
            ok=0;
        i++;
        if(ok==1){
            imax=i;
        }
        a(ok, i, imax);
        if(ok==1){
            imax=i;
        }
    }
    if(v[i]==2){
        i++;
        if(ok==1){
            imax=i;
        }
    }
    if(v[i]==3){
        i++;
        if(ok==1){
            imax=i;
        }
        b(ok, i, imax);
        if(ok==1){
            imax=i;
        }
        c(ok, i, imax);
        if(ok==1){
            imax=i;
        }
        a(ok, i, imax);
        if(ok==1){
            imax=i;
        }
    }
}

int main(){
    fin>>n;
    while(n){
        fin>>m;
        ok=1;
        for(j=1; j<=m; j++){
            fin>>v[j];
        }
        i=1;
        imax=0;
        if(v[i]==1 && v[i+2]==3){
            b(ok, i, imax);
        }else{
            if(v[i==1]){
                c(ok, i, imax);
            }else{
                if(v[i]==2){
                    b(ok, i, imax);
                }else{
                    if(v[i]==3){
                        c(ok, i, imax);
                    }
                }
            }
        }
        if(imax>=m){
            fout<<1<<"\n";
        }else{
            fout<<0<<"\n";
        }
        n--;
    }
}