Chosen by god【组合数打表】
Chosen by god
Everyone knows there is a computer game names "hearth stone", recently xzz likes this game very much. If you want to win, you need both capacity and good luck.
There is a spell card names "Arcane Missiles", which can deal 3 damages randomly split among all enemies.
xzz have a "Arcane Missiles Plus" can deal n damage randomly split among all enemies. The enemy battle field have only two characters: the enemy hero and enemy minion.
Now we assume the enemy hero have infinite health, the enemy minion has m health.
xzz wants to know the probability of the "Arcane Missiles Plus" to kill the enemy minion (the minion has not more than 0 health after "Arcane Missiles Plus"), can you help him?
Input
The first line of the input contains an integer T, the number of test cases. T test cases follow. (1 ≤ T ≤ 100000)
Each test case consists of a single line containing two integer n and m. (0 ≤ m ≤ n ≤ 1000)
Output
For each test case, because the probability can be written as x / y, please output x * y^-1 mod 1000000007. .(y * y^-1 ≡ 1 mod 10^9 + 7)
Sample Input
2
3 3
2 1
Sample Output
125000001
750000006
题意:
给出T组n和m n代表你有n发子弹 敌人有两个 一个血量无穷大 一个为m 每次击中敌人都会掉1滴血 问把血量为m的敌人打死的几率有多大 每次开枪随机打中其中一个敌人
思路:
概率问题 先找所有情况 2^n 击中的概率 c(n,m)+c(n,m+1)+……+c(n,n)
所以p=c(n,m)+c(n,m+1)+……+c(n,n)/2^n
看到组合数求和就有点怕了 想到了组合数打表 之前只是听到过
杨辉三角打表组合数、组合数求和:
仔细观察杨辉三角 有如下规律:
第一行表示c(0,0)n=0
第二行:c(1,0)c(1,1)n=1
以后可以递推,并且每个数的值是其肩膀上两个值的和 根据这个可以打表 代码如下:
void getc()
{
c[0][0]=1,sum[0][0]=1;
for(int i=1;i<=1001;i++){
for(int j=0;j<=i;j++){
if(j==0||j==i){
c[i][j]=1;
}
else{
c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
}
if(j==0){
sum[i][j]=1;
}
else{
sum[i][j]=(sum[i][j-1]+c[i][j])%mod;
}
}
}
}复杂度高了点 但用这个题还好没T
但如果不去先sum求和打好表 就不好说了
AC代码:
下面代码里面也用到了取余的公式 特别是减法 WA了好多次:https://mp.csdn.net/postedit/89529166
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string>
#include<string.h>
#include<map>
using namespace std;
typedef long long LL;
const int MAX=1e6;
const LL mod=1e9+7;
const LL INF=0x3f3f3f3f;
LL qpow(LL m,LL q)
{
LL ans=1;
while(q){
if(q%2){
ans=ans*m%mod;
}
m=m*m%mod;
q/=2;
}
return ans%mod;
}
LL getinv(LL x,LL y)
{
LL ans=qpow(x,y-2)%mod;
return ans;
}
LL c[1005][1005],sum[1005][1005];
void getc()
{
c[0][0]=1,sum[0][0]=1;
for(int i=1;i<=1001;i++){
for(int j=0;j<=i;j++){
if(j==0||j==i){
c[i][j]=1;
}
else{
c[i][j]=(c[i-1][j-1]+c[i-1][j])%mod;
}
if(j==0){
sum[i][j]=1;
}
else{
sum[i][j]=(sum[i][j-1]+c[i][j])%mod;
}
}
}
}
int main()
{
getc();
LL T,n,m;
cin>>T;
while(T--){
LL num=0,sum1=0;
cin>>n>>m;
num=(sum[n][n]-sum[n][m-1]+mod)%mod;
sum1=getinv(qpow(2,n),mod);
sum1=(sum1*num)%mod;
cout<<sum1<<"\n";
}
return 0;
}
Chosen by god【组合数打表】的更多相关文章
- fjwc2019 D6T1 堆(组合数+打表)
#193. 「2019冬令营提高组」堆 但是每个点都遍历一遍,有些点的子树完全相同却重复算了 忽然记起完全二叉树的性质之一:每个非叶节点的子树中至少有一个是满二叉树 那么我们预处理满二叉树的那一块,剩 ...
- HDU-5226 Tom and matrix(组合数求模)
一.题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5226 二.题意 给一个大矩阵,其中,$a[i][j] = C_i^j$.输入5个参数,$x_1, ...
- NOIP2016 D2T1 组合数问题
洛谷P2822 数学真重要啊…… 其实解这一题的关键就是组合恒等式:C(n,m)=C(n-1,m)+C(n-1,m-1),然后再知道组合数的矩阵(杨辉三角)和题中n,m的关系就很容易解决了(然而做这题 ...
- [MySQL5.6] 一个简单的optimizer_trace示例
[MySQL5.6] 一个简单的optimizer_trace示例 前面已经介绍了如何使用和配置MySQL5.6中optimizer_trace(点击博客),本篇我们以一个相对简单的例子来跟踪op ...
- Round Numbers
转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1301472836 大致题意: 输入两个十进制正整数a和b,求闭区间 [a ,b] 内有多少 ...
- Round Numbers(组合数学)
Round Numbers Time Limit : 4000/2000ms (Java/Other) Memory Limit : 131072/65536K (Java/Other) Tota ...
- [SinGuLaRiTy] 复习模板-数学
[SinGuLaRiTy-1047] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 质因数分解 void solve(int n) { == ...
- [HEOI2013]SAO ——计数问题
题目大意: Welcome to SAO ( Strange and Abnormal Online).这是一个 VR MMORPG, 含有 n 个关卡.但是,挑战不同关卡的顺序是一个很大的问题. 有 ...
- [SDOI2009]Bill的挑战——全网唯一 一篇容斥题解
全网唯一一篇容斥题解 Description Solution 看到这个题,大部分人想的是状压dp 但是我是个蒟蒻没想到,就用容斥切掉了. 并且复杂度比一般状压低, (其实这个容斥的算法,提出来源于y ...
随机推荐
- Java——线程安全的集合
线程安全的集合 java.util.concurrent包:ConcurrentHashMap,ConcurrentSkipListMap,ConcurrentSkipListSet,Concu ...
- C语言Printf()规定符号
%d 十进制有符号整数 %u 十进制无符号整数 %f 浮点数 %s 字符串 %c 单个字符 %p 指针的值 %e 指数形式的浮点数 %x, %X 无符号以十六进制表示的整数 %o 无符号以八进制表示的 ...
- Java岗位面试题分享:jvm+分布式+消息队列+协议(已拿offer)
个人近期面试情况 今年二月以来,我的面试除了一个用友的,基本其他都被毙了,可以说是非常残酷的.其中有很多自己觉得还面的不错的岗位,比如百度.跟谁学.好未来等公司.说实话,打击比较大. 情况基本上是从三 ...
- LTE常用标识和参数
1 基本标识 1 .1 IMSI 1.2 IMEI 1.3 MSISDN 1.4 TMSI 1.5 MSRN 2 区域类标识 2.1 GCI 其中 LA是GSM(2g)中的位置区,对应4G中的跟踪区T ...
- 脚本学习一(echo、echo off、@、start)
1.echo表示显示此命令后的字符 脚本: 输出结果: 2.echo off表示在此语句后所有运行的命令都不显示命令行本身 脚本: 输出结果: 3.@与echo off相象,但它是加在每个命令行的最前 ...
- android小Demo--圆球跟随手指轨迹移动
eatwhatApp的客户端基本实现,会再后续进行整改,今天做一个在网上找到的小Demo,让屏幕中出现一个圆球,并跟随手指移动. 写个java类DrawView继承于View: public clas ...
- matlab自学笔记
1.字符串格式化,用sprintf如a=sprintf('%.2f_除以%d等于%.3f',1.5,2,0.75)%则a=1.50除以2等于0.750 2.for循环只能针对整数,不能遍历字符串或其他 ...
- 轻松实现记录与撤销——C#中的Command模式
Command模式属于行为模式,作为大名鼎鼎的23个设计模式之一,Command模式理解起来不如工厂模式,单例模式等那么简单直白.究其原因,行为模式着重于使用,如果没有编程实践,确实不如创造模式那么直 ...
- hexo命令提示 hexo <command>
所有的hexo命令执行后都会提示 hexo <command> 解决方法: 通过hexo init blog命令初始化一个博客后,应该cd /blog 转到博客目录
- SpringBoot 2.x 版本以put方式提交表单不生效的问题详解
在使用SpringBoot 2.x版本时,原有springboot 1.x 版本的通过在表单中添加 input框隐藏域指定_method = put 的方式失效. 虽然浏览器传参的确是带上了这个参数, ...