Cod sursa(job #465461)

Utilizator savimSerban Andrei Stan savim Data 24 iunie 2010 12:53:27
Problema Permutari2 Scor Ascuns
Compilator cpp Status done
Runda Marime 0.75 kb
#include <stdio.h>

#define prim 10007
#define MAX_N 310

int n, k;
int fact[MAX_N], prec[MAX_N];
int c[MAX_N][MAX_N];

int main() {

	freopen("permutari2.in", "r", stdin);
	freopen("permutari2.out", "w", stdout);

	scanf("%d %d", &n, &k);
    
	fact[1] = 1;
	for (int i = 2; i <= n; i++)
		fact[i] = (fact[i - 1] * i) % prim;

	prec[1] = prec[2] = 1;
	for (int i = 3; i <= n; i++) {
		prec[i] = fact[i];
		for (int j = 1; j < i; j++)
			prec[i] = (prec[i] - fact[j] * prec[i - j]) % prim;

		if (prec[i] < 0)
			prec[i] += prim;
	}
	
	c[0][0] = 1;
	for (int i = 0; i < n; i++)
		for (int j = 0; j < k; j++)
			if (c[i][j])
				for (int t = i + 1; t <= n; t++)
					c[t][j + 1] = (c[t][j + 1] + c[i][j] * prec[t - i]);
	printf("%d\n", c[n][k] % prim);

	return 0;
}