Cod sursa(job #1496731)

Utilizator BLz0rDospra Cristian BLz0r Data 5 octombrie 2015 15:21:08
Problema Permutari2 Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include<cstdio>
using namespace std;

#define Nmax 301
#define Mod 10007

FILE *f = fopen ( "permutari2.in", "r" );
FILE *g = fopen ( "permutari2.out", "w" );

int N, K;
int D[Nmax][Nmax], Perm[Nmax];

int main(){

    fscanf ( f, "%d%d", &N, &K );

    Perm[0] = 1;
    for ( int i = 1 ; i <= N ; ++i )
        Perm[i] = ( Perm[i-1]*i ) % Mod;

    D[1][1] = 1;
    for ( int i = 2 ; i <= N ; ++i ){

        int sum = 0;
        for ( int j = 2 ; j <= i ; ++j ){

            for ( int k = j-1 ; k <= i-1 ; ++k ){
                D[i][j] = ( D[i][j] + D[k][j-1] * D[i-k][1] ) % Mod;
            }
            sum += D[i][j];
            if ( sum >= Mod )
                sum -= Mod;
        }

        D[i][1] = Perm[i] - sum;
        if ( D[i][1] < 0 )
            D[i][1] += Mod;
    }

    fprintf ( g, "%d", D[N][K]);

    fclose(f);
    fclose(g);

    return 0;
}