Cod sursa(job #2154706)

Utilizator tiberiu392Tiberiu Ungurianu tiberiu392 Data 7 martie 2018 10:45:12
Problema Perle Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.81 kb
#include <fstream>

using namespace std;

ifstream f("perle.in");
ofstream g("perle.out");

int n,t,v[10009];
int p;

void read()
{
     f >> n ;
     for ( int i = 1 ; i <= n ; i ++ )
        f >> v[i];
}

void rezC();
void rezB();
void rezA();

// A -> 1 | 2 | 3
void rezA()
{
    if(p!=0)
        p++;
}
// B -> 2B | 1A3AC
void rezB()
{
    if(p==0)
        return;
    if(v[p]==2)
      {
         p++;
         rezB();
      }
       else
        if(v[p]==1)
       {
         p++;
          rezA();
          if ( v[p] != 3 )
          {
              p=0;
              return;
          }
          p++;
          rezA();
          rezC();
       }
       else
        p=0;
}

// C -> 2 | 3BC | 12A

void rezC()
{
    if (p == 0)
        return ;

    if (v[ p ] == 2)
         p ++ ;
     else
      if (v[ p ] == 1)
       {
         p ++ ;
        if ( v[ p ] != 2)
        {
            p = 0;
            return ;
        }
      p++;
        rezA ();
     }
     else
     if(v[p]==3)
    {
        p++;
        rezB();
        rezC();
    }
    else
    {
        p=0;
        return;
    }
}

void reC () {
    if (p == 0)
        return ;

    if (v[ p ] == 2) {
        ++ p;
    } else if (v[ p ] == 1) {
        ++ p;
        if (v[ p ] != 2) {
            p = 0;
           // return ;
        }

        ++ p;
        rezA ();
    } else {
        ++ p;
        rezB ();
        rezC ();
    }
}
void solve()
{
    bool ok=0;
     p=1;rezA();
      if(p==n+1)
        ok=1;
     p=1;rezB();
      if(p==n+1)
        ok=1;
     p=1;rezC();
      if(p==n+1)
        ok=1;
     g << ok << '\n';
}

int main()
{
    f >> t
    while ( t--)
    {
        read();
        solve();
    }
    return 0;
}