Cod sursa(job #1496718)

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

#define Nmax 302
#define Mod 10007

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

ifstream fin ( "permutari2.in" );
ofstream fout ( "permutari2.out" );

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

int main () {

    int N, K;

    //fscanf ( f,"%d%d", &N, &K );
    fin >> 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 ; ++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] );
    fout << D[N][K];

    return 0;
}