Cod sursa(job #1345258)

Utilizator assa98Andrei Stanciu assa98 Data 17 februarie 2015 14:38:10
Problema Perle Scor 100
Compilator cpp Status done
Runda bigboss10 Marime 1.45 kb
#include <fstream>
#include <algorithm>
using namespace std;

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

const int MAX_N = 10100;

int v[MAX_N];
int st[MAX_N];

bool check(int val) {
    st[0] = 1;
    st[1] = val;

    for(int i = 1; i <= v[0]; i++) {
        if(st[0] == 0) {
            return false;
        }
        if(st[st[0]] < 4) {
            if(st[st[0]] != v[i]) {
                return false;
            }
            st[0]--;
        }
        else if(st[st[0]] == 4) {
            st[0]--;
        }
        else if(st[st[0]] == 5) {
            if(v[i] == 1) {
                st[st[0]] = 6;
                st[++st[0]] = 4;
                st[++st[0]] = 3;
                st[++st[0]] = 4;
            }
            else if(v[i] == 3){
                return false;
            }
        }
        else {
            if(v[i] == 2) {
                st[0]--;
            }
            else if(v[i] == 1) {
                st[st[0]] = 4;
                st[++st[0]] = 2;
            }
            else {
                st[st[0]] = 6;
                st[++st[0]] = 5;
            }
        }
    }

    return st[0] == 0;
}


int main() {
    int n;
    fin >> n;
    for(int i = 1; i <= n; i++) {
        fin >> v[0];
        for(int j = 1; j <= v[0]; j++) {
            fin >> v[j];
        }
        if(v[0] == 1 || check(5) || check(6)) {
            fout << "1\n";
        }
        else {
            fout << "0\n";
        }
    }
    return 0;
}