http://acm.sgu.ru/problem.php?contest=0&problem=222
类似八皇后,但比八皇后简单。只需要输出解的个数,不需要输出具体的解。另外也不需要判断对角线。
当k>n时显然没有解。
当k=n时有k!个解。
当k<n时,分别从n行和n列中选出k行和k列有
种,在k*k个格中排列有k!种,所有共有
*k!种
submit1 : AC
#include <stdio.h>
long long fact(long n) {
return (n>1) ? fact(n-1)*n : 1;
}
int main(void) {
long long n, k;
scanf ("%I64d%I64d", &n, &k);
if (k > n) {
printf ("0\n");
} else {
printf ("%I64d\n", fact(n)/(fact(k)*fact(n-k))*fact(n)/fact(n-k));
}
return 0;
}