Cod sursa(job #1742446)

Utilizator tifui.alexandruTifui Ioan Alexandru tifui.alexandru Data 16 august 2016 14:37:46
Problema Perle Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.75 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("perle.in");
ofstream g("perle.out");
int a[100001];
int v[100001];
bool rez(int k, char c, int x)
{   char z;
    if(k>x) return false;
    if(c=='A')
    {
        a[k]=v[k];
        if(k-1==x) return true;
        else return false;
    }
    if(c=='B')
    {
        if(v[k]==3) return false;
        if(v[k]==2)
        {
            a[k]=2;
            k++;
            z='B';
            return rez(k,z,x);
        }
        if(v[k]==1)
        {
            a[k]=1;
            k++;
            a[k]=v[k];
            k++;
            a[k]=3;
            if(v[k]!=3) return false;
            k++;
            a[k]=v[k];
            k++;
            z='C';
            return rez(k,z,x);
        }
    }
    if(c=='C')
    {
        if(v[k]==2)
        {
            a[k]=2;
            if(k==x) return true;
            else return false;
        }
        if(v[k]==1)
        {
            a[k]=1;
            k++;
            a[k]=2;
            if(v[k]!=2) return false;
            k++;
            a[k]=v[k];
        }
        if(v[k]==3)
        {
            a[k]=3;
            k++;
            z='B';
            if(rez(k,z,x))
            {
                z='C';
                return rez(k,z,x);
            }
        }
    }
 if(k>x) return false;
}
int main()
{
     int n,l,i,j,r;
    bool ok1,ok2,ok3;
    f>>n;
    for(j=1;j<=n;j++)
    {
        f>>l;
        for(i=1;i<=l;i++)
        f>>v[i];
        char z='A';
        int k=1;
        ok1=rez(k,z,l);
        z='B';
        ok2=rez(k,z,l);
        z='C';
        ok3=rez(k,z,l);
        r=ok1+ok2+ok3;
        g<<r<<'\n';
    }

    return 0;
}