Cod sursa(job #3201212)

Utilizator Mihai_OctMihai Octavian Mihai_Oct Data 7 februarie 2024 09:54:02
Problema Perle Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("perle.in");
ofstream fout("perle.out");
int t, n, v[10002], i;

static inline bool A();
static inline bool B();
static inline bool C();

static inline bool A() {
    if(i == n + 1) return false;

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

static inline bool B() {
    if(i == n + 1) return false;

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

static inline bool C() {
    if(i == n + 1) return false;

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

static inline bool Rezolva() {
    fin >> n;
    for(i = 1; i <= n; i++) fin >> v[i];

    i = 1;
    if(A() && i == n + 1) return true;
    i = 1;
    if(B() && i == n + 1) return true;
    i = 1;
    if(C() && i == n + 1) return true;
    return false;
}

int main() {
    fin >> t;
    while(t--) fout << Rezolva() << "\n";

    return 0;
}