概述
得到公式为:n * C(n - 1- m * k,m - 1) * n / m,记得特判一下m == 1即一个人的情况。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
using namespace std;
const int maxn = 20 + 5;
#define INF 0x3f3f3f3f
#define clr(x,y) memset(x,y,sizeof x )
typedef long long ll;
#define eps 10e-8
const int Mod = 1e9 + 7;
typedef pair<int, int> P;
ll pows(ll x,ll n)
{
ll ret = 1;
while(n)
{
if(n & 1)ret = ret * x % Mod;
n >>= 1;x = x * x % Mod;
}
return ret;
}
ll n,m,k;
void solve()
{
if(n - 1 - m * k < m - 1)
{
puts("0");return;
}
ll ans = 1;
for(int i = 1; i <= m - 1; i ++)
{
ans = ans * (n - 1 - m * k - i + 1) % Mod * pows(i,Mod - 2) % Mod;
}
ans = ans * n % Mod * pows(m,Mod - 2) % Mod;
printf("%I64dn",(ans + Mod ) % Mod );
}
int main()
{
//
freopen("out.txt","r",stdin);
int Tcase;scanf("%d",&Tcase);
while( Tcase --)
{
scanf("%I64d%I64d%I64d",&n,&m,&k);
if(m == 1)
{
printf("%I64dn",n);continue;
}
solve();
}
return 0;
}
最后
以上就是彩色大白为你收集整理的hdu 5894 (组合)的全部内容,希望文章能够帮你解决hdu 5894 (组合)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复