Cod sursa(job #1066814)

Utilizator tudorv96Tudor Varan tudorv96 Data 25 decembrie 2013 17:54:30
Problema Perle Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 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++;
        return B();
    }
    if (v[crt] == 1 && v[crt + 2] == 3) {
        crt += 4;
        return C();
    }
    return 0;
}

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

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

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