题解:P11250 [GESP202409 八级] 手套配对
题目传送门
思路讲解
一道非常经典的排列组合的题。
首先,我们要先从
接下来,因为我们要恰好取走
最终,答案为
我们只需通过杨辉三角预处理组合数,再预处理
需要注意的是,预处理和统计答案时要及时取模,并且输出时要开 long long,否则可能会超过变量的上限。还有当
代码实现
#include <bits/stdc++.h>
using namespace std;
const int mod=1e9+7;
int t,n,m,k;
int C[1003][1003],mi[2003];
int main(){
for(int i=0;i<=1000;i++)
for(int j=0;j<=i;j++)
C[i][j]=(j==0 || j==i?1:C[i-1][j]+C[i-1][j-1]),C[i][j]%=mod;
mi[0]=1;
for(int i=1;i<=2000;i++)
mi[i]=mi[i-1]*2%mod;
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&m,&k);
if(m-2*k<0 || m-2*k>n-k)
printf("0\n");
else
printf("%lld\n",(1LL*C[n][k]*mi[m-2*k]%mod)*C[n-k][m-2*k]%mod);
}
return 0;
}