Cod sursa(job #984185)

Utilizator stefanzzzStefan Popa stefanzzz Data 13 august 2013 19:03:28
Problema Culori Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <fstream>
#define NRM 9901
#define MAXN 260
using namespace std;
ifstream f("culori.in");
ofstream g("culori.out");

int n,v[2*MAXN],nxt[2*MAXN][MAXN],x,pd[2*MAXN][2*MAXN];
long long S;

int main()
{
    int i,j,dif;
    f>>n;
    for(i=1;i<=2*n-1;i++)
        f>>v[i];
    for(i=1;i<=n;i++)
        nxt[2*n][i]=2*n;
    for(i=2*n-1;i>=1;i--){
        for(j=1;j<=n;j++)
            nxt[i][j]=nxt[i+1][j];
        nxt[i][v[i]]=i;}
    n=2*n-1;
    for(i=1;i<=n;i++)
        pd[i][i]=1;
    for(dif=2;dif+1<=n;dif+=2)
        for(i=1;i+dif<=n;i++){
            if(v[i]!=v[i+dif])
                continue;
            j=i+dif;
            x=nxt[i+2][v[i+1]];
            S=pd[i+2][j];
            while(x<j){
                S+=1LL*pd[i+1][x]*pd[x+1][j];
                x=nxt[x+1][v[x]];}
            pd[i][j]=S%NRM;}
    g<<pd[1][n]<<'\n';
    f.close();
    g.close();
    return 0;
}