HDU 4465 数值计算,避免溢出
数学,数值计算,求期望
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=4465
题目描述:
有两个盒子,每个中有n个糖果,(n<10^5)每次任选一个盒子,如果有糖就吃掉,没糖就去开另一个盒子。选中盒子1的概率为p,选中盒子2的概率为1-p.问当发现一个盒子里没有糖时,另一个盒子中糖果的个数的数学期望。
解法:
利用数学期望的定义,结果一共为x = 0,1,2,```,n.如果知道p(x),求sum(x*p(x))即可。为方便计算,设吃掉了i个糖果时发现盒子空。
则有x = 2*n-i时,p[x] = C(i,n)*[p^(n+1)*q^(i-n)+q^(n+1)*p^(i-n)]. n=<i<=2*n. //两个盒子有对称关系
因为n<10^5,计算C(i,n)时会上溢,p^n会下溢。有技巧可解决溢出问题,用公式a = exp(log(a)),log(a*b) = log(a)+log(b),log(a^n) = n*log(a).
再加上公式C(i,n) = i!/(n!*(i-n)!);用s[i]计算出log(i!),用递推式s[i] = s[i-1]+log(i);
代码实现:
for(int i=1; i<N; ++i) s[i] = s[i-1]+log(i);
double ans =0,q = 1-p;//ans 为答案
double logp = log(p);
double logq =log(q);
for(int i=n; i<2*n; ++i)//当i=2*n时,x=0,可不计算
{
double tmp =(2*n-i)*exp(s[i]-s[n]-s[i-n]+(n+1)*logp+(i-n)*logq);
ans += tmp;
tmp =(2*n-i)*exp(s[i]-s[n]-s[i-n]+(n+1)*logq+(i-n)*logp);
ans += tmp;
}
HDU 4465 数值计算,避免溢出的更多相关文章
- Hdu 4465 Candy (快速排列组合+概率)
题目链接: Hdu 4465 Candy 题目描述: 有两个箱子,每个箱子有n颗糖果,抽中第一个箱子的概率为p,抽中另一个箱子的概率为1-p.每次选择一个箱子,有糖果就拿走一颗,没有就换另外一个箱子. ...
- hdu 4465 Candy(二次项概率)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4465 参考博客:http://www.cnblogs.com/goagain/archive/2012 ...
- hdu 4465 概率称号
http://acm.hdu.edu.cn/showproblem.php?pid=4465 第一直觉概率DP但很快被否定,发现只有一个简单的二项分布,但感情的表达,没有对生命和死亡的例子.然后找到准 ...
- HDU 4465 Candy (数学期望)
题意:有两个盒子各有n个糖(n<=2*105),每天随机选1个(概率分别为p,1-p),然后吃掉一颗糖.直到有一天打开盒子一看,这个盒子没有糖了.输入n,p,求此时另一个盒子里糖的个数的数学期望 ...
- hdu 4465 Candy 数学
思路:易知结果为 ∑(n-k)*C(n+k,k)*(p^(n+1)*q^k+q^(n+1)*p^k). 注意不能直接算,注意点技巧!!!看代码 代码如下: #include<iostream&g ...
- hdu 4465 Candy
题解: 由题意得 需要运用: C(m,n)=exp(logC(m,n)) f[]=; ; i<=; i++) f[i]=f[i-]+log(i*1.0); double logC(int m,i ...
- HDU 4465 - Candy(概率与数学优化)
2012成都Regional的B题,花了一个小时推出了式子,但是搞了好久发现都控制不了精度,后来突然想到组合数可以用log优化,改了之后就AC了 比较水的概率题 #include <stdio. ...
- hdu 4465 Candy 2012 成都现场赛
/** 对于大数的很好的应用,,缩小放大,,保持精度 **/ #include <iostream> #include <cmath> #include <algorit ...
- hdu 4465 Candy(2012 ACM-ICPC 成都现场赛)
简单概率题,可以直接由剩余n个递推到剩余0个.现在考虑剩余x个概率为(1-p)的candy时,概率为C(2 * n - x, x) * pow(p, n + 1) *pow(1 - p, n - x ...
随机推荐
- hdu 3887 Counting Offspring dfs序+树状数组
Counting Offspring Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Othe ...
- struts(三) ---OGNL的学习和理解
OGNL:Object graphic Navgation Language(对象图形的导航语言)
- servlet学习笔记_1
一.动态页面和静态页面 动态页面&静态页面:如果浏览器在不同时刻不同条件下访问web服务器的某个页面,浏览器所获得的页面内容会发生变化,那么这种页面称之为动态页面.动态页面和静态页面的区别在于 ...
- charles抓包的使用教程
// Charles 从入门到精通:(http://blog.csdn.net/donwei8/article/details/51647752) //抓包工具:Charles-断点修改 教程 (ht ...
- 报错 for input String ...
一个String类型的数值后面有空格,如:“10001 ” 要转化成int时用 Integer.parseInt 报错 先用.trim()去掉空格 就可以转换了 这个问题其实 ...
- Java 实现word 中写入文字图片的解决方案
JAVA生成WORD文件的方法目前有以下两种方式: 一种是jacob 但是局限于windows平台 往往许多JAVA程序运行于其他操作系统 在此不讨论该方案; 一种是poi但是他的excel处理很程序 ...
- android View事件分发机制结论
原始博客有对源码的分析:http://blog.csdn.net/lmj623565791/article/details/39102591 结论:1.view事件的分发流程: dispatchTou ...
- golang获取数据表转换为json通用方法
package main import ( "database/sql" "fmt" "log" "net/http" ...
- 三种JS方法确定元素在数组中的索引值
第一种:数组遍历 function search(arr,dst){ var i = arr.length; while(i-=1){ if (arr[i] == dst){ return i; } ...
- Android BaseAdapter 数据和显示之间的Adapter 接口
http://www.cnblogs.com/mandroid/archive/2011/04/05/2005525.html