我是靠谱客的博主 矮小鸡翅,最近开发中收集的这篇文章主要介绍hdu5894组合数学,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

其答案是C(n-mk-1,m-1)/m*n
考虑一张桌子先坐上一个人,那么就只剩下n-m*k-1个位置能做人,且第一个人有n个位置可以选那么方案数就是n*C(n-mk-1,m-1)
,因为这里的人是无差别的。比如有3个人,假设他们坐的位置是(2,5,8),那么,(2,5,8),(8,2,5)是重复计算的,还要除以m。

#include<iostream>

#include<cstdio>

#include<cstdlib>

#include<cstring>
#include<algorithm>
#include<vector>

using namespace std;
typedef long long ll;
const ll p=1e9+7;
ll n,m,k;
ll quick_mod(ll a, ll b)
{
ll ans = 1;
a %= p;
while(b)
{
if(b & 1)
{
ans = ans * a % p;
b--;
}
b >>= 1;
a = a * a % p;
}
return ans;
}
ll C(ll n, ll m)
{
if(m > n) return 0;
ll ans = 1;
for(ll i=1; i<=m; i++)
{
ll a = (n + i - m) % p;
ll b = i % p;
ans = ans * (a * quick_mod(b, p-2) % p) % p;
}
return ans;
}
ll Lucas(ll n, ll m)
{
if(m == 0) return 1;
return C(n % p, m % p) * Lucas(n / p, m / p) % p;
}
int main()
{
int t;scanf("%d",&t);
while(t--)
{
scanf("%lld%lld%lld",&n,&m,&k);
printf("%lldn",(Lucas(n-m*k-1,m-1)*quick_mod(m,p-2)%p)*n%p);
}
}

最后

以上就是矮小鸡翅为你收集整理的hdu5894组合数学的全部内容,希望文章能够帮你解决hdu5894组合数学所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部