Cod sursa(job #2157464)

Utilizator Turturica_DorinTurturica Dorin Turturica_Dorin Data 9 martie 2018 17:23:46
Problema Perle Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.88 kb
#include <iostream>
#include <fstream>

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

int n, l, v[ 10005 ], i ,j;

void b ( int &x );
void c ( int &x );

void b ( int & x )
{
    if ( x < l )
    {
        if ( v[ x ] == 2 && x + 1 <= l )
        {
            /// verific daca v[ x + 1 ] = b
            x++;
            b ( x );
        }
        else if ( v[ x ] == 1 && x + 4 <= l )
        {
            /// verific daca v[ x + 2 ] == 3
            /// verific daca v[ x + 4 ] == c
            if ( v[ x + 2 ] == 3 )
            {
                x += 4;
                c ( x );
            }
        }
    }
}

void c ( int & x )
{
    if ( x <= l )
    {
        if ( v[ x ] == 2 )
        {
            x++;
        }
        else if ( v[ x ] == 3 && x + 2 <= l )
        {
            /// verific daca v[ x + 1 ] == b
            /// verific daca v[ x + 2 ] == c
            x++;
            b ( x );
            x = x;
            c ( x );
        }
        else if ( v[ x ] == 1 && x + 1 <= l )
        {
            /// verific daca v[ x + 1 ] == 2
            if ( v[ x + 1 ] == 2 )
            {
                x += 2;
            }
        }
    }
}

int main()
{
    int x;
    fin >> n;
    for ( i = 1; i <= n; i++ )
    {
        fin>>l;
        for ( j = 1; j <= l; j++ )
        {
            fin>>v[ j ];
        }
        x = 1;
        b ( x );
        if ( l == 1 )
        {
            fout << 1 << '\n';
        }
        else if ( x == l + 1 )
        {
            fout<< 1 << '\n';
        }
        else
        {
            x = 1;
            c ( x );
            if ( x == l + 1 )
            {
                fout<< 1 << '\n';
            }
            else
            {
                fout<< 0 << '\n';
            }
        }
    }
    return 0;
}