Cod sursa(job #2152334)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 5 martie 2018 14:01:04
Problema Perle Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <bits/stdc++.h>
using namespace std;

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

const int DIM = 10010;

int arr[DIM];

int solveA(int p);
int solveB(int p);
int solveC(int p);

int solveA(int p) {
    if (arr[p] == 0)
        return 0;

    return p;
}

int solveB(int p) {
    if (arr[p] == 0)
        return 0;

    if (arr[p] == 2)
        return solveB(p + 1);
    if (arr[p] == 1 && arr[p + 2] == 3)
        return solveC(p + 4);
    return 0;
}

int solveC(int p) {
    if (arr[p] == 0)
        return 0;

    if (arr[p] == 2)
        return p;
    if (arr[p] == 1 && arr[p + 1] == 2)
        return solveA(p + 2);

    int pos = solveB(p + 1);
    if (pos == 0)
        return 0;
    else
        return solveC(pos + 1);

    return 0;
}

int main(void) {
    int t;
    in >> t;

    while (t--) {
        int n;
        in >> n;

        arr[n + 1] = arr[n + 2] = 0;
        arr[n + 3] = arr[n + 4] = 0;

        for (int i = 1; i <= n; ++i)
            in >> arr[i];

        if (solveA(1) == n || solveB(1) == n || solveC(1) == n)
            out << "1\n";
        else
            out << "0\n";
    }

    return 0;
}