The Monkey King

Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 487    Accepted Submission(s): 166

Problem Description
As
everyone known, The Monkey King is Son Goku. He and his offspring live
in Mountain of Flowers and Fruits. One day, his sons get n peaches. And there are m monkeys (including GoKu), they are numbered from 1 to m,
GoKu’s number is 1. GoKu wants to distribute these peaches to
themselves. Since GoKu is the King, so he must get the most peach. GoKu
wants to know how many different ways he can distribute these peaches.
For example n=2, m=3, there is only one way to distribute these peach: 2
0 0.

When given n and m,
you are expected to calculate how many different ways GoKu can
distribute these peaches. Answer may be very large, output the answer
modular 1000000007 instead.
 
Input
There are multiple test cases. In the first line of the input file there is an integer T indicates the number of test cases.

In the next T lines, each line contains n and m which is mentioned above.

[Technical Specification]

All input items are integers.

1≤T≤25

1≤n,m≤100000
 
Output
For each case,the output should occupies exactly one line.

See the sample for more details.
 
Sample Input
2
2 2
3 5
Sample Output
1
5

Hint

For the second case, there are five ways. They are
2 1 0 0 0
2 0 1 0 0
2 0 0 1 0
2 0 0 0 1
3 0 0 0 0

 
思路:隔板法+容斥+逆元;
先枚举第一个人分得的个数,然后我们考虑剩下的可以咋放,剩下的为n-i那么这些要给m-1个人,且可以为空,那么就是C(n-i+m-2,m-2)种,然后我们减去里面不符合情况的,我们枚举至少有k个不小于第一个人的个数的,那么我们就必须在这些人中给i个,然后剩下的在用分给m-1个人,F[j] = C(m-1,1)*C(n-(1+k)*j+m-2,m-2)
那么这些里面会有重复的,F[1] = C(1,1)f(1)+C(2,1)f(2)+C(3,1)f(3)+......;
F[2] = C(2,2)f(2) + C(3,2)f(3)+C(4,2)f(4)+....;
那么f(j)就是我们要的,那么我们可以知道F(1)-F(2) + F(3)-F(4).....  = f(1)+f(2)+...;
(1+x)^n+(1-x)^n = 2*(C(n,0)+C(n,2)+...)当x = 1的时候那么有偶数项等于2^(n-1) = 奇数项,那么C(n,1)-C(n,2)+C(n,3) ..+C(n,n) = 1;
所以要的到sum(f(j)) = F(1)-F(2) + F(3)-F(4)..... (奇加偶减)
复杂度(n*log(n))
 1 #include <iostream>
2 #include<algorithm>
3 #include<string.h>
4 #include<queue>
5 #include<math.h>
6 #include<set>
7 #include<stdio.h>
8 using namespace std;
9 typedef long long LL;
10 LL N[200010];
11 LL NN[200010];
12 const LL mod = 1e9+7;
13 LL quick(LL n,LL m);
14 LL C(LL n,LL m);
15 int main(void)
16 {
17 int n;
18 scanf("%d",&n);
19 N[0] = 1;
20 int i,j;NN[0] = 1;
21 for(i = 1; i <= 200005; i++)
22 {
23 N[i] = N[i-1]*(LL)i%mod;
24 NN[i] = quick(N[i],mod-2);
25 }
26 //printf("%lld\n",quick(6,mod-2));
27 while(n--)
28 {
29 int m,k;
30 scanf("%d %d",&m,&k);
31 LL sum = 0;
32 if(k == 1)
33 printf("%d\n",k);
34 else
35 {
36 for(i = m; i >= 1; i--)
37 {
38 LL x = m-i;
39 LL y = k-1;
40 LL an = C(x+y-1,y-1);
41 for(j = 1; j <= k-1&&(LL)(j+1)*(LL)i<= m; j++)
42 {
43 x = k-1;
44 y = j;
45 LL akk = C(x,y);
46 LL ab = m-(LL)(j+1)*(LL)i;
47 ab = ab+k-2;
48 LL bk = C(ab,k-2);
49 if(j%2)
50 an = an-bk*akk%mod;
51 else an+=(bk*akk)%mod;
52 an = an%mod;
53 }
54 sum = (sum+an)%mod;
55 }
56 printf("%lld\n",(sum%mod+mod)%mod);
57 }
58 }
59 }
60 LL C(LL n,LL m)
61 {
62 LL ni = NN[n-m]*NN[m]%mod;
63 return ni*N[n]%mod;
64 }
65 LL quick(LL n,LL m)
66 {
67 LL ask = 1;
68 n%=mod;
69 while(m)
70 {
71 if(m&1)
72 ask = ask*n%mod;
73 n = n*n%mod;
74 m/=2;
75 }
76 return ask;
77 }

The Monkey King(hdu5201)的更多相关文章

  1. ZOJ 2334 Monkey King

    并查集+左偏树.....合并的时候用左偏树,合并结束后吧父结点全部定成树的根节点,保证任意两个猴子都可以通过Find找到最厉害的猴子                       Monkey King ...

  2. 数据结构(左偏树):HDU 1512 Monkey King

    Monkey King Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  3. P1456 Monkey King

    题目地址:P1456 Monkey King 一道挺模板的左偏树题 不会左偏树?看论文打模板,完了之后再回来吧 然后你发现看完论文打完模板之后就可以A掉这道题不用回来了 细节见代码 #include ...

  4. HDU - 5201 :The Monkey King (组合数 & 容斥)

    As everyone known, The Monkey King is Son Goku. He and his offspring live in Mountain of Flowers and ...

  5. Monkey King(左偏树 可并堆)

    我们知道如果要我们给一个序列排序,按照某种大小顺序关系,我们很容易想到优先队列,的确很方便,但是优先队列也有解决不了的问题,当题目要求你把两个优先队列合并的时候,这就实现不了了 优先队列只有插入 删除 ...

  6. 1512 Monkey King

    Monkey King Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  7. HDU-5201 The Monkey King

    题目描述 \(m\)个猴子分\(n\)个桃,要求第一个猴子的桃数严格大于其他猴子,问有多少种分法对\(1e9+7取模(\%1e9+7)\) Input \(1≤T≤25 ,1≤n,m≤100000\) ...

  8. hdu1512 Monkey King

    Problem Description Once in a forest, there lived N aggressive monkeys. At the beginning, they each ...

  9. [Monkey King]

    题目描述 在一个森林里住着N(N<=10000)只猴子.在一开始,他们是互不认识的.但是随着时间的推移,猴子们少不了争斗,但那只会发生在互不认识(认识具有传递性)的两只猴子之间.争斗时,两只猴子 ...

随机推荐

  1. 分布式事务(4)---最终一致性方案之TCC

    分布式事务(1)-理论基础 分布式事务(2)---强一致性分布式事务解决方案 分布式事务(3)---强一致性分布式事务Atomikos实战 强一致性分布式事务解决方案要求参与事务的各个节点的数据时刻保 ...

  2. OpenStack——云平台部署

    一.配置网络 准备:安装两台最小化的CentOS7.2的虚拟机,分别添加两张网卡,分别为仅主机模式和NAT模式,并且计算节点设置为4G运行内存,50G硬盘 1.控制节点--配置网络 控制节点第一个网卡 ...

  3. 学习java 7.11

     学习内容: 泛型定义格式:<类型> 优点:把运行时期的问题提前到编译期间:避免了强制类型转换   泛型方法:public class Fanxing { public <T> ...

  4. 14. GLIBCXX_3.4.9' not found - 解决办法

    在Linux中安装交叉编译器arm-linux-gcc 4.4.3,然后编译mini2440内核出错: /usr/lib/libstdc++.so.6: version GLIBCXX_3.4.9' ...

  5. 从源码看RequestMappingHandlerMapping的注册与发现

    1.问题的产生 日常开发中,大多数的API层中@Controller注解和@RequestMapping注解都会被使用在其中,但是为什么标注了@Controller和@RequestMapping注解 ...

  6. mystar01 nodejs MVC 公共CSS,JS设置

    mystar01 nodejs MVC gulp 项目搭建 config/express.js中定义别名 //将下载的第三方库添加到静态资源路径当中,方便访问 app.use('/jquery', e ...

  7. jquery对radio和checkbox的操作

    jQuery获取Radio选择的Value值 代码  $("input[name='radio_name'][checked]").val(); //选择被选中Radio的Valu ...

  8. 如何使用pycharm克隆阿里云项目

    我们回到PyCharm刚打开时的界面,如图1-1所示:   点击"Check out from Version Control" => "Git",如图1 ...

  9. 初步接触Linux命令

    目录 虚拟机快照 1.首先将已经运行的系统关机 2.找到快照 拍摄快照 3.找到克隆 下一步 有几个快照会显示几个 4.克隆完成后 要修改一下IP 不然无法同时运行两个虚拟机系统 系统介绍 1.pin ...

  10. Sentinel之流控规则

    在上文Sentinel流量防卫兵中讲到了Sentinel入门以及流控规则一小部分,而Sentinel还有以下规则: 熔断降级规则 热点参数规则 系统规则 黑白名单规则 本文要讲的是流控规则 流量控制规 ...