uva 1639 Candy (对数处理精度)
https://vjudge.net/problem/UVA-1639
有两个盒子各有n(n≤2*10 5 )个糖,每天随机选一个(概率分别为p,1-p),然后吃一颗糖。
直到有一天,打开盒子一看,没糖了!
输入n, p,求此时另一个盒子里糖的个数的数学期望。
若最后打开第1个盒子,此时第2个盒子有i颗,则这之前打开过n+(n-i)次盒子,
其中有n次取的是盒子1,其余n-i次取的盒子2,
概率为C(2n-i, n)*p^(n+1) *(1-p)^(n-i)
注意p的指数是n+1,因为除了前面打开过n次盒子1之外,最后又打开了一次。
同理,若最后打开第2个盒子,此时第1个盒子有i颗,
概率为 C(2n-i, n)*(1-p)^(n+1) * p^(n-i)
所以ans=
Σ i*C(2n-i, n)*p^(n+1) *(1-p)^(n-i)
+
Σ i*C(2n-i, n)*(1-p)^(n+1) * p^(n-i)
精度处理:转化为对数v
设v1(i) = ln(C(2n-i, n)) + (n+1)ln(p) +(n-i)ln(1-p),
v2(i) = ln(C(2n-i, n)) + (n+1)ln(1-p) +(n-i)ln(p)
最终答案为 Σ{ i*(e^v1(i) +e^v2(i) ) }
#include<cmath>
#include<cstdio>
#define N 200001
using namespace std;
long double logsum[N*];
int main()
{
for(int i=;i<N*;i++) logsum[i]=logsum[i-]+log((long double)i);
int n,t=;
double p,ans;
while(scanf("%d",&n)!=EOF)
{
scanf("%lf",&p);
ans=0.0;
long double tmp1=(n+)*log(p),tmp2=(n+)*log(-p);
long double logp=log(p),logpp=log(-p);
for(int i=;i<=n;i++)
{
long double k=logsum[*n-i]-logsum[n]-logsum[*n-i-n];
ans+=(i*(exp(k+tmp1+(n-i)*logpp)+exp(k+tmp2+(n-i)*logp)));
}
t++;
printf("Case %d: %.6f\n",t,ans);
}
}
uva 1639 Candy (对数处理精度)的更多相关文章
- UVA 1639 Candy (组合数+精度)
题意:两个箱子,每个箱子有n颗糖,每次有p的概率拿1号箱子的一颗糖出来(有1-p的概率拿2号箱子的一颗糖出来),问当打开某个箱子为空的时候,另一个箱子的期望糖的数量是多少 题解:枚举另一个箱子的糖的数 ...
- UVa 1639 - Candy(数学期望 + 精度处理)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- UVA - 1639 Candy (概率,精度)
X表示剩下的糖数量,如果最后打开的是p对应的盒子.划分:Xi表示剩下i个糖,最后一次选的概率为p, 前面的服从二项分布.根据全概率公式和期望的线性性,求和就好了. 精度处理要小心,n很大,组合数会很大 ...
- UVa 1639 Candy (数学期望+组合数学+高精度存储)
题意:有两个盒子各有n个糖,每次随机选一个(概率分别为p,1-p),然后吃掉,直到有一次,你打开盒子发现,没糖了! 输入n,p,求另一个盒子里糖的个数的数学期望. 析:先不说这个题多坑,首先要用lon ...
- UVA - 1639 -Candy
题目链接:https://vjudge.net/problem/UVA-1639 题目大意: 有两个糖果盒,每个盒子里面有n个糖果,每天随机选一个(概率分别为p,1-p),然后吃一颗糖.直到有一天,打 ...
- uva 1639--精度处理方法之取对数(uva 1639)
1639 - Candy Time limit: 3.000 seconds 1639 CandyLazyChild is a lazy child who likes candy very much ...
- 紫书 例题 10-17 UVa 1639(数学期望+对数保存精度)
设置最后打开的是盒子1, 另外一个盒子剩下i个 那么在这之前打开了n + n - i次盒子 那么这个时候的概率是C(2 * n - i, n) p ^ (n+1) (1-p)^ (n - i) 那么反 ...
- UVa 1639 (期望) Candy
题意: 两个盒子里各有n颗糖,每天有p的概率从第一个盒子里取一颗糖,1-p的概率从第二个盒子里去一颗糖.直到某一天打开某个盒子忽然发现没糖了,求另一个盒子里剩余糖果数的期望. 分析: 紫书上面已经分析 ...
- UVa 10883 (组合数 对数) Supermean
在纸上演算一下就能看出答案是:sum{ C(n-1, i) * a[i] / 2^(n-1) | 0 ≤ i ≤ n-1 } 组合数可以通过递推计算:C(n, k) = C(n, k-1) * (n- ...
随机推荐
- 基于NABCD评论探路者团队贪吃蛇作品及改进建议
1.根据(不限于)NABCD评论作品的选题 N:随着人们生活压力越来越大,需要去去缓解压力,并且也需要不断进步,学习英语知识. A:它是基于java开发的一款软件,采用逐个吃字母,加长蛇身,增强记忆的 ...
- Python学习之路7 - 生成器&迭代器
本章内容: 列表生成式 生成器 yield 迭代器 列表生成式 当我们要定义一个列表的时候,我们通常用这种方式a = [1,2,3],但是如果我们定义了一个比较长的列表的时候,手动定义列表就会比较麻烦 ...
- 浅谈Java变量的初始化顺序详解
规则1(无继承情况下):对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序依次是(静态变量.静态初始化块)>(变量.初始化块)>构造器证明代码: 复制代码 代码如下: p ...
- IT小小鸟的读后感
在我经历了半个学期的大学生活后,我依然不清楚我现在所学的专业有什么用或者说该怎么学.直到我阅读了<我是一只IT小小鸟>这篇文章之后.我才对我所将来或许要从事的IT事业有了些许的了解. 在观 ...
- this & super
/* 当本类的成员和局部变量同名用this区分. 当子父类中的成员变量同名用super区分父类. this和super的用法很相似. this:代表一个本类对象的引用. super:代表一个父 ...
- jQuery之层次选择器
层次选择器: 查找子元素, 后代元素, 兄弟元素的选择器1. ancestor descendant 在给定的祖先元素下匹配所有的后代元素2. parent>child 在给定的父元素下匹配所有 ...
- 0330复利计算java版
package compounding; import java.util.Scanner; public class compounding1_1 { public static void main ...
- webpack打包多html开发案例
简单说明: 1,案例没有使用devserver,所以不能实时查看 2,案例是将src下面的html.css.js分别进行处理 3,多html的规律是需要有多个entry,每个html一个entry,当 ...
- mybatis_mysql
SELECT round(avg(c.AVG_DELAY_TIME)) as AVG_DELAY FROM `result_road_saturation_day` a LEFT JOIN info_ ...
- 微信小程序 功能函数 touch触摸计时
shiFN:function(e){ // touchstart // touchend let that=this; let n=0; // 判断是开始还是结束的参数 let textTure = ...