Cod sursa(job #614280)

Utilizator AndrewTheGreatAndrei Alexandrescu AndrewTheGreat Data 5 octombrie 2011 22:04:44
Problema Perle Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <iostream>
#include <stdio.h>

using namespace std;

const int nmax = 10010;
int N, A[nmax];

int F(int ind, int P)
{
    if(ind > N)
        return N + 1;
    if(P == 4 && N == 1)
        return ind;
    if(P == 5)
    {
        if(A[ind] == 2)
            return F(ind + 1, P);
        if(A[ind] == 1 && A[ind + 2] == 3)
            return F(ind + 4, 6);
        return 0;
    }
    if(P == 6)
    {
        if(ind == N && A[ind] == 2)
            return ind;
        if(A[ind] == 3)
            return F(F(ind + 1, 5), 6);
        if(A[ind] == 1 && A[ind + 1] == 2 && ind + 2 == N)
            return N;
        return 0;
    }
    return 0;
}

int main()
{
    freopen ("perle.in","r", stdin);
    freopen ("perle.out", "w", stdout);

    int Q, i, Rez;
    scanf("%d", &Q);
    while(Q--)
    {
        scanf("%d", &N);
        for(i = 1; i <= N; i++)
            scanf("%d", &A[i]);

        Rez = F(1, 4);
        if(Rez != N)
            Rez = F(1, 5);
        if(Rez != N)
            Rez = F(1, 6);
        if(Rez == N)
            Rez = 1;

        printf("%d\n", Rez);
    }
    return 0;
}