Cod sursa(job #2298413)

Utilizator razvanradulescuRadulescu Razvan razvanradulescu Data 8 decembrie 2018 10:00:57
Problema Perle Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.06 kb
#include <iostream>
#include <cstdio>
using namespace std;

int a[10005], n;
bool ok = 1;

void createBC(int i, int t)
{
    if(t == 1)
    {
        if(a[i] == 2 && i+1<n)
        {
            a[i] = -1;
            createBC(i+1, 1);
        }
        else if(a[i] == 1 && a[i+2] == 3 && i+4<n)
        {
            a[i] = -1;
            a[i+1] = -1;
            a[i+2] = -1;
            a[i+3] = -1;
            createBC(i+4, 2);
        }
    }
    else
    {
        if(a[i] == 2)
        {
            a[i] = -1;
        }
        else if(a[i] == 3)
        {
            a[i] = -1;
            createBC(i+1, 1);
            while(a[i] == -1)
                i++;
            if(i>=n)
                printf("0");
            else
                createBC(i, 2);
        }
        else if(a[i] == 1 && a[i+1] == 2)
        {
            a[i] = -1;
            a[i+1] = -1;
            a[i+2] = -1;
        }
    }
}

void creareNr()
{
    ok = 1;
    scanf("%d", &n);
    for(int i = 0; i<n; i++)
    {
        scanf("%d", &a[i]);
    }
    int i = 0;
    if(n == 1)
        a[i] = -1;
    else if(a[i] == 2 && i+1<n)
    {
        a[i] = -1;
        createBC(i+1, 1);
    }
    else if(a[i] == 1 && a[i+2] == 3 && i+4<n)
    {
        a[i] = -1;
        a[i+1] = -1;
        a[i+2] = -1;
        a[i+3] = -1;
        createBC(i+4, 2);
    }
    else if(a[i] == 2)
    {
        a[i] = -1;
    }
    else if(a[i] == 3)
    {
        a[i] = -1;
        createBC(i+1, 1);
        while(a[i] == -1)
            i++;
        if(i>=n)
            ok = 0;
        else
            createBC(i, 2);
    }
    else if(a[i] == 1 && a[i+1] == 2)
    {
        a[i] = -1;
        a[i+1] = -1;
        a[i+2] = -1;
    }
    if(a[n-1] == -1 && ok == 1)
        printf("1\n");
    else
        printf("0\n");
}

int main()
{
    freopen("perle.in", "r", stdin);
    freopen("perle.out", "w", stdout);
    int m = 0;
    scanf("%d", &m);
    for(int i = 0; i<m; i++)
        creareNr();
    return 0;
}