Cod sursa(job #2151288)

Utilizator ionanghelinaIonut Anghelina ionanghelina Data 4 martie 2018 12:28:02
Problema Perle Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include<bits/stdc++.h>
using namespace std;
int i,n,v[10005];
inline int A();
inline int B();
inline int C();
inline int A()
{
    if(i>n) return 0;
    i++;
    return 1;
}


inline int B()
{
    if(i>n)
        return 0;
    if(v[i]==3)
    {
        i++;
        return 0;
    }
    if(v[i]==2)
    {
        i++;
        return B();
    }
    if(v[i]==1)
    {
        i++;
        if(!A()) return 0;
        if(v[i]!=3) return 0;
        i++;
        if(!A()) return 0;
        if(!C()) return 0;
        return 1;
    }

    return 0;
}

inline int C()
{
    if(i>n) return 0;
    if(v[i]==2)
    {
        i++;
        return 1;
    }
    if(v[i]==1)
    {
        i++;
        if(v[i]!=2) return 0;
        i++;
        if(!A()) return 0;
        return 1;
    }
    if(v[i]==3)
    {
        i++;
        if(!B()) return 0;
        if(!C()) return 0;
        return 1;
    }
    return 0;
}
int t;
int main()
{
    freopen("perle.in","r",stdin);
    freopen("perle.out","w",stdout);

    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        for(int i=1;i<=n;i++)
            scanf("%d",&v[i]);

        i=1;
        int sol=A();
        if(i>n && sol)
        {
            printf("1\n");
            continue;
        }
        i=1;
        sol=B();
        if(i>n && sol)
        {
            printf("1\n");
            continue;
        }
        i=1;
        sol=C();
        if(i>n && sol)
        {
            printf("1\n");
            continue;
        }
        printf("0\n");
    }

    return 0;
}