Cod sursa(job #3233806)

Utilizator PescarusTanislav Luca Andrei Pescarus Data 4 iunie 2024 23:32:35
Problema Perle Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("perle.in");
ofstream g("perle.out");
int v[10006];
int n, m, i;
int A(), B(), C();
int A(){
    if(i == m + 1){
        return 0;
    }
    if(v[i] == 1 || v[i] == 2 || v[i] == 3){
        i++;
        return 1;
    } else return 0;
}
int B(){
    if(i == m + 1){
        return 0;
    }
    if(v[i] == 2){
        i++;
        return B();
    }
    if(v[i] == 1){
        i++;
        int aux = A();
        if(aux == 0) return 0;
        if(v[i] != 3) return 0;
            i++;
            aux = A();
            if(aux == 0) return 0;
            return C();
    } else return 0;
}
int C(){
    if(i == m + 1) return 0;
    if(v[i] == 2){
        i++;
        return 1;
    } else{
        if(v[i] == 1){
            i++;
            if(v[i] != 2){
                i++;
                return 0;
            } else{
                i++;
                return A();
            }
        } else{
            i++;
            int aux = B();
            if(aux == 0) return 0;
            return C();
        }
    }
}
int main(){
    f >> n;
    while(n--){
        f >> m;
        for(int j = 1; j <= m; j++){
            f >> v[j];
        }
        i = 1;
        int sol = A();
        if(sol == 1 && i == m + 1){
            g << "1\n";
            continue;
        }
        i = 1;
        sol = B();
        if(sol == 1 && i == m + 1){
            g << "1\n";
            continue;
        }
        i = 1;
        sol = C();
        if(sol == 1 && i == m + 1){
            g << "1\n";
            continue;
        }
        g << "0\n";
    }
}