题意:在一个
n×n
的棋盘上放k个车,它们不能互相攻击,有几种放法
先从n行中选k行放车,然后就是n选k的全排列
答案是
CknAkn
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll C(int n, int k)
{
if(n < k) return 0;
ll res = 1;
for(int i = 1; i <= k; i++)
res = res * (n - i + 1) / i;
return res;
}
ll A(int n, int k)
{
if(n < k) return 0;
ll res = 1;
for(int i = n - k + 1; i <= n; i++)
res *= i;
return res;
}
int main()
{
int T;
scanf("%d", &T);
for(int ca = 1; ca <= T; ca++)
{
int n, k;
scanf("%d%d", &n, &k);
printf("Case %d: %lld\n", ca, C(n, k) * A(n, k));
}
return 0;
}