sgu222 Little Rooks

来源:互联网 发布:智能音箱软件 编辑:程序博客网 时间:2024/05/16 05:19

题意:

两个车互不攻击,当且仅当它们不在同一行或同一列上。输入整数n和k,你需要求出在n*n的国际象棋棋盘上放k个互不攻击的车有多少种方法。

tip:

组合数学
Cnk*cnk*k!(n行n列选k个)

#include <cstdio>#include <iostream>#include <cstring>using namespace std;const int maxn = 12;int n,k;long long ans[maxn];void pre(){    ans[1] = 1;    ans[0] = 1;    for(int i = 2;i < maxn;i++)        ans[i] = ans[i-1] * i;    //cout << ans[maxn-1]<<endl;}void init(){    scanf("%d%d",&n,&k);    if(n < k)        printf("0\n");    else        printf("%lld\n",ans[k]*(ans[n]/ans[k]/ans[n-k]) * (ans[n]/ans[k]/ans[n-k]) );}int main(){    pre();    init();}