Cod sursa(job #464870)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 22 iunie 2010 12:08:41
Problema Culori Scor 12
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>

using namespace std;

#define file_in "culori.in"
#define file_out "culori.out"

#define nmax (1<<8)+1
#define mmax (1<<7)+1

int n;
int c[mmax];
int a[2*mmax+10][2*mmax+10];

void citire()
{
    freopen(file_in,"r",stdin);
    freopen(file_out,"w",stdout);

    scanf("%d", &n);
    for (int i=0;i<2*n-1;++i)
         scanf("%d", &c[i]);

}

#define mod 9901

void solve()
{
     int i,j,k,l;

     n=2*n-1;
     for (i=0;i<n;++i)
          a[i][i]=1;

     for (l=2;l<n;++l)
     {
         for (i=0;i<n-l;++i)
           {
               j=i+l;
                if (c[i]==c[j])
                {
                for (k=i;k<j;++k)
                    {
                         a[i][j]+=a[i][k]*a[k+1][j-1];
                         if (a[i][j]>=mod)
                             a[i][j]%=mod;
                             k++;
                     }
                }

           }
           l++;
     }
     printf("%d\n", a[0][n-1]);

}

int main()
{
    citire();
    solve();

    fclose(stdin);
    fclose(stdout);

    return 0;
}