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 (对数处理精度)的更多相关文章

  1. UVA 1639 Candy (组合数+精度)

    题意:两个箱子,每个箱子有n颗糖,每次有p的概率拿1号箱子的一颗糖出来(有1-p的概率拿2号箱子的一颗糖出来),问当打开某个箱子为空的时候,另一个箱子的期望糖的数量是多少 题解:枚举另一个箱子的糖的数 ...

  2. UVa 1639 - Candy(数学期望 + 精度处理)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  3. UVA - 1639 Candy (概率,精度)

    X表示剩下的糖数量,如果最后打开的是p对应的盒子.划分:Xi表示剩下i个糖,最后一次选的概率为p, 前面的服从二项分布.根据全概率公式和期望的线性性,求和就好了. 精度处理要小心,n很大,组合数会很大 ...

  4. UVa 1639 Candy (数学期望+组合数学+高精度存储)

    题意:有两个盒子各有n个糖,每次随机选一个(概率分别为p,1-p),然后吃掉,直到有一次,你打开盒子发现,没糖了! 输入n,p,求另一个盒子里糖的个数的数学期望. 析:先不说这个题多坑,首先要用lon ...

  5. UVA - 1639 -Candy

    题目链接:https://vjudge.net/problem/UVA-1639 题目大意: 有两个糖果盒,每个盒子里面有n个糖果,每天随机选一个(概率分别为p,1-p),然后吃一颗糖.直到有一天,打 ...

  6. uva 1639--精度处理方法之取对数(uva 1639)

    1639 - Candy Time limit: 3.000 seconds 1639 CandyLazyChild is a lazy child who likes candy very much ...

  7. 紫书 例题 10-17 UVa 1639(数学期望+对数保存精度)

    设置最后打开的是盒子1, 另外一个盒子剩下i个 那么在这之前打开了n + n - i次盒子 那么这个时候的概率是C(2 * n - i, n) p ^ (n+1) (1-p)^ (n - i) 那么反 ...

  8. UVa 1639 (期望) Candy

    题意: 两个盒子里各有n颗糖,每天有p的概率从第一个盒子里取一颗糖,1-p的概率从第二个盒子里去一颗糖.直到某一天打开某个盒子忽然发现没糖了,求另一个盒子里剩余糖果数的期望. 分析: 紫书上面已经分析 ...

  9. 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- ...

随机推荐

  1. Scrum立会报告+燃尽图(十一月十八日总第二十六次):功能开发与讨论贡献分配规则

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284 项目地址:https://git.coding.net/zhang ...

  2. Alpha冲刺——第八天

    Alpha第八天 听说 031502543 周龙荣(队长) 031502615 李家鹏 031502632 伍晨薇 031502637 张柽 031502639 郑秦 1.前言 任务分配是VV.ZQ. ...

  3. Ubuntu命令行安装显卡驱动

    1. sudo apt-et purge nvidia* 卸载原有驱动 2. sudo add-apt-repository ppa:graphics-drivers sudo apt-get upd ...

  4. iOS- Swift:使用FMDB进行数据库操作(线程安全:增删改查)

    1.前言 GitHub上2000多颗星的FMDB数据库框架想来大家都很熟悉, 今天用Swift对其进行了一个完成的数据存储读流程 写完之后用博客分享之,与大家一起交流, 希望对需要的朋友提供些帮助   ...

  5. 3dContactPointAnnotationTool开发日志(三四)

      今天就是让背景图可以变大变小,变透明度,然后将3d的点投影到图片上,输出2d接触点信息:   可以看到输出了正确的接触点信息:   然后还把空物体的包围盒大小设置为边长为0.1的的正方体,点击选中 ...

  6. android studio 运行太慢了

    Android Studio每次升级/安装 Android Studio 之后最好都修改一下这个参数:到 Android Studio 安装目录,找到 bin/studio(64?).vmoption ...

  7. delphi self 的使用

    delphi之self 在使用delphi的对象技术的时候,经常会看到一个词汇:self,它到底指的是什么呢? 我们还要从对象与类的关系谈起. 类是对将要创建的对象的性质的描述,是一种文档.这很重要: ...

  8. CF708C-Centroids

    题目 一棵树的重心定义为一个点满足删除这个点后最大的连通块大小小于等于原来这颗树大小的一半. 给出一棵树,一次操作为删除一条边再添加一条边,操作结束后必须仍为一棵树.问这颗树的每个点是否可以通过一次操 ...

  9. BZOJ 2152 聪聪可可(树形DP)

    给出一颗n个点带边权的树(n<=20000),求随机选择两个点,使得它们之间的路径边权是3的倍数的概率是多少. 首先总的对数是n*n,那么只需要统计路径边权是3的倍数的点对数量就行了. 考虑将无 ...

  10. 学Python Django学得很迷茫,怎么办?-转自知乎

    本人学生,零编程基础,在学习python的过程中越学越迷茫,感觉像无头苍蝇一样,来知乎取经,下面进入正题吧:        我是先看了中谷的python教学视频,然后跟着慕课网上的python教程把题 ...