Cod sursa(job #1066843)

Utilizator tudorv96Tudor Varan tudorv96 Data 25 decembrie 2013 18:12:46
Problema Perle Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <fstream>
using namespace std;

//A -> 1 | 2 | 3
//B -> 2B | 1A3AC
//C -> 2 | 3BC | 12A

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

const int N = 10010;

short v[N], n, crt, t;

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

bool B() {
    if (v[crt] == 2 && crt + 1 < n) {
        crt++;
        return B();
    }
    if (v[crt] == 1 && v[crt + 2] == 3 && crt + 4 < n) {
        crt += 4;
        return C();
    }
    return 0;
}

bool C() {
    if (v[crt] == 2 && crt < n) {
        crt++;
        return 1;
    }
    if (v[crt] == 3) {
        crt++;
        if (B() && crt < n)
            return C();
    }
    if (v[crt] == 1 && v[crt+1] == 2 && crt + 2 < n) {
        crt += 3;
        return 1;
    }
    return 0;
}

bool solve() {
    if (n == 1)
        return 1;
    if (v[crt] == 2 || (v[crt] == 1 && v[crt+2] == 3 && n > 4))
        return B();
    return C();
}

int main() {
    fin >> t;
    while (t--) {
        fin >> n;
        crt = 0;
        for (short i = 0; i < n; ++i)
            fin >> v[i];
        fout << solve() << "\n";
    }
}