Cod sursa(job #2893929)

Utilizator Ilie_MityIlie Dumitru Ilie_Mity Data 26 aprilie 2022 20:09:11
Problema Perle Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.91 kb
//Ilie Dumitru
#include<cstdio>
#include<vector>
typedef long long int ll;
const int NMAX=10005;
const ll MOD=1000000007;

FILE* f=fopen("perle.in", "r"), *g=fopen("perle.out", "w");

int n, v[NMAX];

int rec(int index, char perla)
{
    if(index>n)
        return n+1;
    switch(perla)
    {
    case 'B':
        {
            if(v[index]==3)
                return n+1;
            if(v[index]==2)
                return rec(index+1, 'B');
            if(index+2<n && v[index+2]==3)
                return rec(index+4, 'C');
            return n+1;
        }
    case 'C':
        {
            switch(v[index])
            {
            case 2:
                return index+1;
            case 1:
                {
                    if(index+1<n && v[index+1]==2)
                        return index+3;
                    return n+1;
                }
            case 3:
                return rec(rec(index+1, 'B'), 'C');
            }
        }
    }
    return n+1;
}

int solve()
{
    int i;
    fscanf(f, "%d", &n);
    for(i=0;i<n;++i)
        fscanf(f, "%d", v+i);
    switch(*v)
    {
    case 1:
        {
            switch(n)
            {
            case 1:
                return 1;
            case 3:
                return v[1]==2;
            default:
                {
                    if(n>4 && v[2]==3)
                        return rec(4, 'C')==n;
                    return 0;
                }
            }
        }
    case 2:
        {
            if(n==1)
                return 1;
            return rec(1, 'B')==n;
        }
    case 3:
        {
            if(n==1)
                return 1;
            return rec(rec(1, 'B'), 'C')==n;
        }
    }
    return 0;
}

int main()
{
    int t;
    fscanf(f, "%d", &t);
    while(t--)
        fprintf(g, "%d\n", solve());
    fclose(f);
    fclose(g);
    return 0;
}