Cod sursa(job #18589)

Utilizator StTwisterKerekes Felix StTwister Data 18 februarie 2007 12:42:24
Problema Culori Scor 12
Compilator cpp Status done
Runda preONI 2007, Runda 2, Clasele 11-12 Marime 1.02 kb
#include <stdio.h>
#include <queue>

#define NMAX 512
#define MOD 9901

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

void arbori(int niv)
{
    st[++p] = A[ind];
    if (niv>N)
    {
        st[p] = 0;
        --p;
        return;
    }
    if (ind == 2*N-1)
    {
        st[p] = 0;
        --p;
        if (niv == 1)
            sol += 1;
        return;
    }


    ++ind;
    if (A[ind] == st[p-1])
    {
        int x = st[p-1];
        int x2 = st[p];
        st[p] = 0;
        st[p-1] = 0;
        p-=2;
        arbori(niv-1);
        p+=2;
        st[p] = x2;
        st[p-1] = x;
    }
    arbori(niv+1);
    st[p] = 0;
    --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;
    parent[A[1]] = -1;
    sol = 0;
    p = 0;
    st[0] = -1;
    arbori(1);
    printf("%d\n", sol);
}