Cod sursa(job #3196622)

Utilizator MrPuzzleDespa Fabian Stefan MrPuzzle Data 24 ianuarie 2024 13:22:02
Problema Perle Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <bits/stdc++.h>

#define DIM 10000

using namespace std;

//ifstream f("in.in");
//ofstream g("out.out");

ifstream f("perle.in");
ofstream g("perle.out");

int t,n;
bool sol;
int idx;
int s[DIM+20];

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

bool A(){
    idx++;
    return 1;
}

bool B(){
    bool ok = 1;

    if(s[idx] == 1){
        ok &= (s[idx] == 1);
        idx++;

        ok &= A();

        ok &= (s[idx] == 3);
        idx++;

        ok &= A();

        ok &= C();
    }else if(s[idx] == 2){
        ok &= (s[idx] == 2);
        idx++;

        ok &= B();
    }if(s[idx] == 3){
        ok = 0;
    }

    return ok;
}

bool C(){
    bool ok = 1;

    if(s[idx] == 1){
        ok &= (s[idx] == 1);
        idx++;

        ok &= (s[idx] == 2);
        idx++;

        ok &= A();
    }else if(s[idx] == 2){
        ok &= (s[idx] == 2);
        idx++;
    }if(s[idx] == 3){
        ok &= (s[idx] == 3);
        idx++;

        ok &= B();

        ok &= C();
    }

    return ok;
}

void solve(){

    f>>n;
    for(int i=1;i<=n;i++){
        f>>s[i];
    }

    sol = 0;

    idx = 1;
    sol |= (A() && idx == n+1);

    idx = 1;
    sol |= (B() && idx == n+1);

    idx = 1;
    sol |= (C() && idx == n+1);

    g<<sol<<'\n';
}

int main(){

    f>>t;
    while(t--){
        solve();
    }
    return 0;
}