http://acm.sgu.ru/problem.php?contest=0&problem=222

类似八皇后,但比八皇后简单。只需要输出解的个数,不需要输出具体的解。另外也不需要判断对角线。
当k>n时显然没有解。
当k=n时有k!个解。
当k<n时,分别从n行和n列中选出k行和k列有C_n^k  \cdot c_n^k 种,在k*k个格中排列有k!种,所有共有C_n^k  \cdot c_n^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;
}


posted on 2010-05-07 16:04 Willing 阅读(409) 评论(0)  编辑 收藏 引用 所属分类: ACM

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理