Cod sursa(job #466246)

Utilizator antoanelaAntoanela Siminiuc antoanela Data 26 iunie 2010 12:29:54
Problema Permutari2 Scor 100
Compilator cpp Status done
Runda Stelele Informaticii 2010, gimnaziu si clasa a IX-a, Ziua 2 Marime 0.94 kb
#include <cstdio>
#define X 10007
#define nmax 310

int n, k, v[nmax][nmax];

int fact (int x)
{
    int i, p=1;
    for (i=2; i<=x; i++) p=(p*i)%X;
    return p;
}

int main()
{
    freopen("permutari2.in","r",stdin);
    freopen("permutari2.out","w",stdout);
    scanf("%d %d",&n,&k);
    int i, j, c, s;
    v[1][1]=1;
    v[2][1]=1;
    v[2][2]=1;
    v[3][1]=3;
    v[3][2]=2;
    v[3][3]=1;
    for (i=4; i<=n; i++)
    {
        v[i][i]=1;
        if (i>1) s=1; else s=0;
        for (j=2; j<i; j++)
        {


            for (c=i-1; c>=j-1; c--)
            {
                v[i][j]=(v[i][j]+v[c][j-1]*v[i-c][1]%X)%X;
            }
                s=(s+v[i][j])%X;
    }
        c=fact(i);
        v[i][1]=c-s;
        if (v[i][1]<0) v[i][1]+=X;
    }
    /*for (i=1; i<=n; i++)
    {
        for (j=1; j<=n; j++) printf("%d ",v[i][j]);
        printf("\n");
    }*/
    printf("%d\n",v[n][k]);
}