博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu-5894 hannnnah_j’s Biological Test(组合数学)
阅读量:5025 次
发布时间:2019-06-12

本文共 2204 字,大约阅读时间需要 7 分钟。

题目链接:

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)

Total Submission(s): 412    Accepted Submission(s): 129

Problem Description
hannnnah_j is a teacher in WL High school who teaches biology.
One day, she wants to test m students, thus she arranges n different seats around a round table.
In order to prevent cheating, she thinks that there should be at least k empty seats between every two students.
hannnnah_j is poor at math, and she wants to know the sum of the solutions.So she turns to you for help.Can you help her? The answer maybe large, and you need to mod 1e9+7.
 

 

Input
First line is an integer T(T≤1000).
The next T lines were given n, m, k, respectively.
0 < m < n < 1e6, 0 < k < 1000
 

 

Output
For each test case the output is only one integer number ans in a line.
 

 

Sample Input
2
4 2 6
5 2 1
 

 

Sample Output
0
5
 
题意:
 
给出n个不同的围成一圈的座位,现在有m个人,要求每两个人之间要空至少k个座位,问有多少种方案;
 
思路:
 
m个人要坐m个座位,还要至少空m*k个座位,剩下的就是n-m*(k+1)个座位了,放在m个间隔中,就是相同的球放在不同的盒子那个模型了;
C(n-m*k-1,m-1),然后n个不同的座位那么就可以有n种不同的开始方式,然后这其中的每一种方式都被算了m次;
所以C(n-m*k-1,m-1)*n/m就是答案了;
 
AC代码:
#include 
#include
#include
#include
#include
#include
#include
#include
using namespace std; #define For(i,j,n) for(int i=j;i<=n;i++)#define mst(ss,b) memset(ss,b,sizeof(ss)); typedef long long LL; template
void read(T&num) { char CH; bool F=false; for(CH=getchar();CH<'0'||CH>'9';F= CH=='-',CH=getchar()); for(num=0;CH>='0'&&CH<='9';num=num*10+CH-'0',CH=getchar()); F && (num=-num);}int stk[70], tp;template
inline void print(T p) { if(!p) { puts("0"); return; } while(p) stk[++ tp] = p%10, p/=10; while(tp) putchar(stk[tp--] + '0'); putchar('\n');} const LL mod=1e9+7;const double PI=acos(-1.0);const LL inf=1e18;const int N=(1<<20)+10;const int maxn=1e6+10;const double eps=1e-12; int n,m,k;LL p[maxn];inline void Init(){ p[0]=1; p[1]=1; for(int i=2;i
>=1; } return s;}int main(){ //freopen("int.txt","r",stdin); Init(); int t; read(t); while(t--) { read(n);read(m);read(k); if(m==1){printf("%d\n",n);continue;} if(n

  

转载于:https://www.cnblogs.com/zhangchengc919/p/5885717.html

你可能感兴趣的文章
生成指定位数随机数的方法
查看>>
java的垃圾回收
查看>>
Essential C++学习笔记
查看>>
python+selenium进行简单验证码获取
查看>>
where,having与 group by连用的区别
查看>>
线程池调用案例
查看>>
操作Excel文件后无法退出进行解决办法
查看>>
NodeJS - Express 4.0下使用app.dynamicHelpers错误
查看>>
iframe应用-后台生成iframe标记
查看>>
Python 单例模式
查看>>
javascript学习-原生javascript的小特效(改变透明度效果)
查看>>
Vue(小案例_vue+axios仿手机app)_购物车(计算商品总金额)
查看>>
python实现快速排序
查看>>
一键搭建本地yum源
查看>>
Redhat 7 安装Samba服务
查看>>
实验时css层叠样式表不更新的情况
查看>>
jmeter-xpath的用法
查看>>
windows平台下配置hadoop的javahome时空格问题解决[转]
查看>>
POJ1118
查看>>
第二次oo总结
查看>>