Cod sursa(job #3197415)

Utilizator victor_gabrielVictor Tene victor_gabriel Data 26 ianuarie 2024 19:32:34
Problema Perle Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.43 kb
#include <fstream>

using namespace std;

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

const int DIM = 10010;

int n, l, ind;
int v[DIM];

bool pearl(int type) {
    if (type == 1) {
        ind++;
        return true;
    } else if (type == 2) {
        if (v[ind] == 2) {
            ind++;
            return pearl(2);
        }
        if (v[ind] == 1) {
            ind++;
            bool r1, r2, r3;

            r1 = pearl(1);
            if (v[ind] == 3) {
                ind++;
                r2 = pearl(1);
                r3 = pearl(3);
                return r1 && r2 && r3;
            }
            return false;
        }
        return false;
    } else {
        if (v[ind] == 2) {
            ind++;
            return true;
        }
        if (v[ind] == 3) {
            ind++;
            bool r1, r2;
            r1 = pearl(2);
            r2 = pearl(3);
            return r1 && r2;
        }
        if (v[ind] == 1 && v[ind + 1] == 2) {
            ind += 2;
            return pearl(1);
        }
        return false;
    }
}

int main() {
    fin >> n;
    for (int i = 1; i <= n; i++) {
        fin >> l;
        for (int j = 1; j <= l; j++)
            fin >> v[j];

        ind = 1;
        bool p1 = pearl(1) && (ind == l + 1);
        ind = 1;
        bool p2 = pearl(2) && (ind == l + 1);
        ind = 1;
        bool p3 = pearl(3) && (ind == l + 1);

        fout << (p1 || p2 || p3) << '\n';
    }

    return 0;
}