Cod sursa(job #18596)

Utilizator StTwisterKerekes Felix StTwister Data 18 februarie 2007 12:45:04
Problema Culori Scor 12
Compilator cpp Status done
Runda preONI 2007, Runda 2, Clasa a 10-a Marime 0.89 kb
#include <stdio.h>

#define NMAX 512
#define MOD 9901

int A[NMAX];
int st[NMAX];
int N, ind, sol,p;

void arbori(int niv)
{
    if (niv>N)
    {
        return;
    }
    if (ind == 2*N-1)
    {
        if (niv == 1)
        {
            sol += 1;
            sol %- MOD;
        }
        return;
    }


    st[++p] = A[ind];
    ++ind;
    if (A[ind] == st[p-1])
    {
        int x = st[p-1];
        int x2 = st[p];
        p-=2;
        arbori(niv-1);
        p+=2;
        st[p] = x2;
        st[p-1] = x;
    }
    arbori(niv+1);
    --p;
    --ind;
}

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

    scanf("%d", &N);
    for (int i = 1; i<=2*N-1; ++i)
    {
        scanf("%d", &A[i]);
    }

    ind = 1;
    sol = 0;
    p = 0;
    st[0] = -1;
    arbori(1);
    printf("%d\n", sol);
}