Cod sursa(job #3294212)

Utilizator EricDimiericdc EricDimi Data 19 aprilie 2025 14:47:15
Problema Perle Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.85 kb
#include <bits/stdc++.h>

using namespace std;

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

const int MAX_LEN = 10'000;

int v[MAX_LEN + 1];
int n, t, i;
int A(), B(), C();

int A() {
    if (i == n + 1)
        return 0;
    
    if (v[i] == 1 || v[i] == 2 || v[i] == 3) {
        i++;
        return 1;
    } 
    else
        return 0;
}

int B() {
    if (i == n + 1)
        return 0;
    if (v[i] == 2) {
        i++;
        return B();
    }
    else
    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();
    }
    return 0;
}

int C() {
    if (i == n + 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
    if (v[i] == 3) {
        i++;
        int aux = B();
        if (aux == 0)
            return 0;
        return C();
    }
}

int main() {
    f >> t;
    for (; t > 0; t--) {
        f >> n;
        for (i = 1; i <= n; i++)
            f >> v[i];
        
        i = 1;
        int rez = A();
        if (rez && i == n + 1) {
            g << "1\n";
            continue;
        }
        
        i = 1;
        rez = B();
        if (rez && i == n + 1) {
            g << "1\n";
            continue;
        }
        
        i = 1;
        rez = C();
        if (rez && i == n + 1) {
            g << "1\n";
            continue;
        }
        
        g << "0\n";
    } 
    
    f.close();
    g.close();
    return 0;
}