题意: 给一个n*n的棋盘,求放k个車的方法数。
思路:数学排列组合。 k>n 为0;
ans=C(n,k) * C(n,k) * k!。
AC代码:
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#define ll long long
using namespace std;
ll n,k;
ll C(int b,int a) { //求C(b,a);
ll s=1;
for(int i=1; i<=a; i++) {
s=s*(b-i+1)/i;
}
return s;
}
int main(){
int t; scanf("%d",&t);
for(int cas=1; cas<=t; cas++) {
scanf("%d%d",&n,&k);
printf("Case %d: ",cas);
if(k>n) {
printf("0\n"); continue;
}
ll c=C(n,k);
ll Ans = 1;
for (int i = 1; i <= k; i++)
Ans *= i;
ll ans=c*c*Ans;
printf("%lld\n",ans);
}
return 0;
}