Cod sursa(job #1280879)

Utilizator MKLOLDragos Ristache MKLOL Data 2 decembrie 2014 17:35:46
Problema Culori Scor 48
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<stdio.h>
#define MOD 9901
int v[505050];
int N;
int viz[666][666];
int din[666][666];

void calc(int x,int y){
    if((y-x+1) % 2 == 0)
        return;
    //printf("%d %d\n",x,y);
    if(y - x == 0){
        din[x][y]=1;
        return;
    }

    if(v[x] != v[y])
        return;
    if(viz[x][y])
        return;

    viz[x][y]=1;

    calc(x+1,y-1);
    din[x][y] += din[x+1][y-1];
    din[x][y] %= MOD;
    for(int i=x+1;i<y;++i){
        //printf("%d %d %d!\n",x,y,i);
        if(v[x] == v[i]){
            calc(x+1,i-1);
            calc(i,y);
            din[x][y] += (din[x+1][i-1] * din[i][y]%MOD);
            //printf("%d %d\n",din[x+1][i-1], din[i][y]);
            din[x][y] %= MOD;
        }
    }
}

int main(){
    freopen("culori.in","r",stdin);
    freopen("culori.out","w",stdout);
    scanf("%d",&N);
    N=N*2-1;
    for(int i=1;i<=N;++i){
        scanf("%d",&v[i]);
    }
    calc(1,N);
    printf("%d\n",din[1][N]);
}