题意: 给你一个n*n的正方形格子,填充m个车,使得两两不冲突,问你有多少种方法
解题思路: 在n行中选m行是C(n,m),在n列中选出m列 A(n,m),总共有C(n,m)*A(n,m)中方法
#include<stdio.h>
#include<string.h>
typedef double LL;//用__int64是个坑,要用double转换
LL C(LL n,LL m)
{
LL sum_n = 1,sum_m = 1;
for(LL i = n; i >= n-m+1; i--)
sum_n *= i;
for(LL i = m; i >= 1; i--)
sum_m *= i;
return sum_n/sum_m;
}
LL A(LL n,LL m)
{
LL sum_n = 1;
for(LL i = n; i >= n-m+1; i--)
sum_n *= i;
return sum_n;
}
int main()
{
int t,Case = 1;
LL n,m;
scanf("%d",&t);
while(t--)
{
scanf("%lf%lf",&n,&m);
printf("Case %d: ",Case++);
if(n < m) printf("0\n");
else printf("%.lf\n",C(n,m)*A(n,m));
}
}