Cod sursa(job #3334669)

Utilizator parus_majorParus Major parus_major Data 18 ianuarie 2026 22:33:05
Problema Perle Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>

using namespace std;

ifstream fin("perle.in");
ofstream fout("perle.out");

const int MAXN = 10002;

int T, N;
int v[MAXN];

bool A(int& i);
bool B(int& i);
bool C(int& i);

bool A(int& i) {
    if (i > N) {
        return false;
    }

    ++i; 
    return true;
    //if (v[i] == 1 || v[i] == 2 || v[i] == 3) {
    //    ++i;
    //    return true;
    //}
    //return false;
}

bool B(int& i) {
    if (i > N || v[i] == 3) return false;
    if (v[i] == 2) {
        ++i;
        return B(i);
    }
    
    ++i;
    if (!A(i)) return false;
    if (v[i] != 3) return false;
    ++i;
    if (!A(i)) return false;
    return C(i);
}

bool C(int& i) {
    if (i > N) return false;

    if (v[i] == 2) {
        ++i; return true;
    }
    else if (v[i] == 3) {
        ++i;
        if (!B(i)) return false;
        return C(i);
    }
    else {
        ++i;
        if (v[i] != 2) return false;
        ++i;
        return A(i);
    }
}



int main()
{
    fin >> T;
    for (int t = 0; t < T; ++t) {
        fin >> N;
        for (int i = 1; i <= N; ++i) {
            fin >> v[i];
        }
        int i = 1;
        if (A(i) && i == N + 1) {
            fout << "1\n";
            continue;
        }

        i = 1;
        if (B(i) && i == N + 1) {
            fout << "1\n";
            continue;
        }

        i = 1;
        if (C(i) && i == N + 1) {
            fout << "1\n";
            continue;
        }

        fout << "0\n";
    }
    return 0;
}