题目链接:

http://acm.hdu.edu.cn/showproblem.php?pid=5894

题意:

一个圆桌上有$n$个不同的位置,$m$个相同的人安排到这$n$个位置上,要求两人相邻的人至少相距$k$个位置,问有多少种安排方法?

分析:

我们可以将$1个人的位置和他旁边的k个位置绑定$看成一个盒子,剩下的$n-mtimes (k+1)$个空位置看成若干相同的球,那么这些空位置的插入问题就可以转化为将 $a个相同的球放入b个不同的盒子中$,此时$a=n - m times (k+1),b = m-1$。
利用插板法,想象$a$个球排成一排,中间有$a-1$个空位,取$b-1$个板子,插入到这些空中,由于板子不能插入到同一个地方,则此时没有空盒,与题意不符,那么就先给每个盒子放一个球,求出此时的插板方法数,为${a + b-1 choose {b-1}}$,即${n - m times k - 1 choose {m-1}}$。
位置不同,第一个盒子的位置有$n$种,最后要乘上$n$。人是相同的,最后要除以$m$。
注意判断$n-mtimes k - 1$是否大0,还一定要先特判$m=1$的情况,此时答案为$n$【在这个地方$wa$了无数次。
$m,n$都不是很大,直接打表预处理一下阶乘直接求组合数即可。

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
#include<set>
大专栏  HDU 5894 hannnnah_j’s Biological Test【组合数学】 class="meta">#include<map>
#include<algorithm>
using namespace std;
const int maxn = 1e6 + 5, mod = 1e9 + 7;
typedef long long ll;
ll fact[maxn];
void ()
{
fact[0] = 1;
for(int i = 1; i < maxn; i++) fact[i] = fact[i - 1] * 1ll * i % mod;
}
ll quick_pow(ll b, int a)
{
ll ans = 1;
for(; a; a >>= 1, b = b * b % mod){
if(a & 1) ans = ans * b % mod;
}
return ans;
}
int main (void)
{
init();
int T;scanf("%d",&T);
while(T--){
ll m, n, k;scanf("%I64d%I64d%I64d", &n, &m, &k);
if(m == 1){
printf("%I64dn", n);
continue;
}
if(n - 1 < m * k){
puts("0");
continue;
}
ll nn = n - m * k - 1;
ll nm = m - 1;
ll ans = fact[nn] * quick_pow(fact[nm], mod - 2) % mod * quick_pow(fact[nn - nm], mod - 2) % mod;
ans = ans * n % mod * quick_pow(m, mod - 2) % mod;
printf("%I64dn", ans);
}
return 0;
}

HDU 5894 hannnnah_j’s Biological Test【组合数学】的更多相关文章

  1. hdu 5894 hannnnah_j’s Biological Test 组合数学

    传送门:hdu 5894 hannnnah_j’s Biological Test 题目大意:n个座位,m个学生,使每个学生的间隔至少为k个座位 组合中的插空法 思路:每个学生先去掉k个空位间隔,剩下 ...

  2. HDU 5894 hannnnah_j’s Biological Test (组合数学) -2016 ICPC沈阳赛区网络赛

    题目链接 #include <map> #include <queue> #include <math.h> #include <stdio.h> #i ...

  3. HDU 5894 hannnnah_j’s Biological Test

    题目链接:传送门 题目大意:有n张板凳围成一圈,有m个人,要让m个人都坐到凳子上且任意两人之间相隔>=k 个凳子,问有多少种方法%(1e9+7) 题目思路:组合数学 我们这样考虑,既然每个人相距 ...

  4. HDU 5894 hannnnah_j’s Biological Test ——(组合数)

    思路来自于:http://blog.csdn.net/lzedo/article/details/52585170. 不过并不需要卢卡斯定理,直接组合数就可以了. 代码如下: #include < ...

  5. hdu 5894(组合数取模)

    hannnnah_j’s Biological Test Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K ...

  6. 2016 ACM/ICPC Asia Regional Shenyang Online 1003/HDU 5894 数学/组合数/逆元

    hannnnah_j’s Biological Test Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K ...

  7. 排列组合+组合数取模 HDU 5894

    // 排列组合+组合数取模 HDU 5894 // 题意:n个座位不同,m个人去坐(人是一样的),每个人之间至少相隔k个座位问方案数 // 思路: // 定好m个人 相邻人之间k个座位 剩下就剩n-( ...

  8. HDU 5059 Harry And Biological Teacher

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=5069 题意:给出n个串,m个询问,每个询问(u,v),求u的一个最长后缀是v的前缀. 思路:离线.将关于u ...

  9. HDU 5226 Tom and matrix(组合数学+Lucas定理)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5226 题意:给一个矩阵a,a[i][j] = C(i,j)(i>=j) or 0(i < ...

随机推荐

  1. 如何保存Keras模型

    我们不推荐使用pickle或cPickle来保存Keras模型 你可以使用model.save(filepath)将Keras模型和权重保存在一个HDF5文件中,该文件将包含: 模型的结构,以便重构该 ...

  2. 吴裕雄--天生自然 JAVA开发学习:异常处理

    try { // 程序代码 }catch(ExceptionName e1) { //Catch 块 } import java.io.*; public class ExcepTest{ publi ...

  3. 计算文本长度-boundingRectWithSize

    - (void)viewDidLoad {    [super viewDidLoad]; //新建lable控件 UILabel *lable=[[UILabel alloc]init]; labl ...

  4. 使用xb文件恢复mysql数据

    1.安装工具Percona XtraBackup MySQL 5.6及之前的版本需要安装 Percona XtraBackup 2.3,安装指导请参见官方文档Percona XtraBackup 2. ...

  5. Form表单中method="post/get'的区别

    Form提供了两种数据传输的方式--get和post.虽然它们都是数据的提交方式,但是在实际传输时确有很大的不同,并且可能会对数据产生严重的影响.虽然为了方便的得到变量值,Web容器已经屏蔽了二者的一 ...

  6. 一个搜索框的小demo

    一.实时按照输入的搜索值显示与其匹配的内容,隐藏其它内容 <%@ Page Language="C#" AutoEventWireup="true" Co ...

  7. Dangal 观影感受,(摘录)

    ===================================================================================== 引用: https://ww ...

  8. 头次接触wamp服务器、xampp,初次单独使用tomcat部署

    刚刚经过了近两天的接触wamp.xampp.tomcat的时光,真的爽 导师有个网站打不开了,就让我去弄,还有一个网站的后台密码忘了,让我帮忙找回来.我第一感觉就是第一个活不简单,第二个还不简单吗?打 ...

  9. 【转】HeadFirst 组合模式+迭代器错误原因以及解决代码

    http://blog.csdn.net/sugar_girl/article/details/53400267     <HeadFirst JAVA设计模式>中用迭代器迭代组合模式是存 ...

  10. [LC] 443. String Compression

    Given an array of characters, compress it in-place. The length after compression must always be smal ...