Cod sursa(job #2696487)

Utilizator IoanaDraganescuIoana Draganescu IoanaDraganescu Data 16 ianuarie 2021 00:22:46
Problema Perle Scor 50
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int NMax = 10, LMax = 1e4;

int n, l;
int v[LMax + 5];

void Read(){
    fin >> l;
    for (int i = 1; i <= l; i++)
        fin >> v[i];
}

int isA(int ind1, int ind2);
int isB(int ind1, int ind2);
int isC(int ind1, int ind2);

int isA(int ind1, int ind2){
    if (ind1 == ind2)
        return 1;
    return 0;
}

int isB(int ind1, int ind2){
    if (ind1 > ind2)
        return 0;
    if (v[ind1] == 2 && isB(ind1 + 1, ind2))
        return 1;
    if (ind1 + 4 <= ind2 && v[ind1] == 1 && isA(ind1 + 1, ind1 + 1) && v[ind1 + 2] == 3 && isA(ind1 + 3, ind1 + 3) && isC(ind1 + 4, ind2))
        return 1;
    return 0;
}

int isC(int ind1, int ind2){
    if (ind1 > ind2)
        return 0;
    if (ind1 == ind2 && v[ind1] == 2)
        return 1;
    if (ind1 + 2 <= ind2 && v[ind1] == 1 && v[ind1 + 1] == 2 && isA(ind1 + 2, ind2))
        return 1;
    if (v[ind1] != 3)
        return 0;
    ind1++;
    for (int i = ind1; i < ind2; i++)
        if (isB(ind1, i) && isC(i + 1, ind2))
            return 1;
    return 0;
}

void Print(){
    if (isA(1, l) || isB(1, l) || isC(1, l))
        fout << 1 << '\n';
    else
        fout << 0 << '\n';
}

int main(){
    fin >> n;
    for (int i = 1; i <= n; i++){
        Read();
        Print();
    }
    return 0;
}