链接:

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

题意:

有两个盒子各有n(1≤n≤2e5)个糖,每天随机选一个(概率分别为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之外,最后又打开了一次。
这个概率表达式在数学上是正确的,但是用计算机计算时需要小心:
n可能高达20万,因此C(2n-i,n)可能非常大,而(p^(n+1))和((1-p)^(n-i))却非常接近0。
如果分别计算这3项再乘起来,会损失很多精度。
一种处理方式是利用对数,设v1(i) = ln(C(2n-i,n)) + (n+1)ln(p) + (n-i)ln(1-p),
则“最后打开第1个盒子”对应的数学期望为e^v1(i)。
同理,当最后打开的是第2个盒子,对数为v2(i) = ln(C(2n-i,n)) + (n+1)ln(1-p) + (n-i)ln(p),概率为e^v2(i)。
根据数学期望的定义,最终答案为sum{i(e^v1(i)+e^v2(i))}。

代码:

 1 #include <cstdio>
 2 #include <cmath>
 3
 4 const int UP = 2e5 * 2 + 5;
 5 long double logF[UP];
 6
 7 // C(n,m) = n!/(m!(n-m)!)
 8 long double logC(int n, int m) {
 9     return logF[n] - logF[m] - logF[n-m];
10 }
11
12 double solve(int n, double p) {
13     double ans = 0;
14     for(int i = 0; i <= n; i++) {
15         long double c = logC(n+n-i, n);
16         long double v1 = c + (n+1)*log(p) + (n-i)*log(1-p);
17         long double v2 = c + (n+1)*log(1-p) + (n-i)*log(p);
18         ans += i * (exp(v1) + exp(v2));
19     }
20     return ans;
21 }
22
23 int main() {
24     logF[0] = 0;
25     for(int i = 1; i < UP; i++) logF[i] = logF[i-1] + log(i);
26     int n;
27     double p;
28     for(int cases = 1; ~scanf("%d%lf", &n, &p); cases++) {
29         printf("Case %d: %.6f\n", cases, solve(n, p));
30     }
31     return 0;
32 }

转载于:https://www.cnblogs.com/hkxy125/p/9559936.html

UVa 1639 - Candy(数学期望 + 精度处理)相关推荐

  1. 数学期望和概率DP题目泛做(为了对应AD的课件)

    题1: Uva 1636 Headshot 题目大意: 给出一个000111序列,注意实际上是环状的.问是0出现的概率大,还是当前是0,下一个还是0的概率大. 问题比较简单,注意比较大小: A/C & ...

  2. Candy UVA 1639 (数学期望)

    Candy UVA 1639 (数学期望) 有两个盒子各有n颗糖(n<=2*105),从两个盒子取糖的概率为p和1-p,直到一个盒子没糖,求另一个盒子中糖的个数的数学期望. 期望公式为: E=∑ ...

  3. uva 11762 数学期望+记忆化搜索

    题目大意:给一个正整数N,每次可以在不超过N的素数中随机选择一个P,如果P是N的约数,则把N变成N/p,否则N不变,问平均情况下需要多少次随机选择,才能把N变成1? 分析:根据数学期望的线性和全期望公 ...

  4. 数论小白都能看懂的数学期望讲解

    -1.灌水 这里阅读应该效果更佳 想了解更多关于数论的内容,可戳这里 感谢@command_block 大佬提出宝贵建议 也感谢洛谷及UVA的相关题目 如果有小瑕疵可以在评论区提出 内容可能有点多但很 ...

  5. python 数学期望_python机器学习笔记:EM算法

    完整代码及其数据,请移步小编的GitHub 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/MachineLearningNote EM算法也称期望最大化 ...

  6. 218 扑克牌(数学期望)

    1. 问题描述: Admin 生日那天,Rainbow 来找 Admin 玩扑克牌.玩着玩着 Rainbow 觉得太没意思了,于是决定给 Admin 一个考验.Rainbow 把一副扑克牌(54 张) ...

  7. 数学期望 极小值的几种求法

    前言: 其中一维搜索方法这种思想,在图像二值化里面有应用.像二维码算法里面的条形码二值化,就是这种算法的进阶版. 缺点是只能按照一个方向进行搜索,且步伐需要调整. 目录: 数学期望例子 一维搜索方法求 ...

  8. 随机变量的数字特征(数学期望,方差,协方差与相关系数)

    戳这里:概率论思维导图 !!! 数学期望 离散型随机变量的数学期望 (这里要求级数绝对收敛,若不绝对收敛,则E(X)不存在) 如果有绝对收敛,则有 ,其中 连续型随机变量的数学期望 (这里要求绝对收敛 ...

  9. 解题报告(一)F、(2018 ACM - ICPC shenyang I)Distance Between Sweethearts(数学期望 + 乘法原理 + FWT)(4.5)

    繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...

最新文章

  1. 计算机一级多选题没有选分,计算机一级多选题
  2. 1190 最小公倍数之和 V2
  3. CF528C. Data Center Drama(欧拉回路,构造)
  4. leetcode979. 在二叉树中分配硬币(dfs)
  5. 组态王串口服务器虚拟串口,串口服务器USR-N520连接组态王设置步骤
  6. python爬虫源代码_【Python每日一问】Python爬虫能做什么?
  7. Mysql高可用方案mmm
  8. 储存程序是现代计算机的,A、信息论B、存储程序原理C、现代计算机理论D.DOC
  9. # 研究杂感 × VOSviewer(第六辑)
  10. 罗永浩直播带货卖了1.1亿,更高级的自我认知【附直播卖货商业计划书PPT】
  11. OLED多级菜单记录
  12. KSO-C#语言2021年落选,Python获年度编程语言
  13. 如何编写智能合约(Smart Contract)?(II)建立加密代币
  14. 445端口的用处和禁用
  15. 【Ubuntu18.04 无法找到终端 ifconfig 命令】
  16. STM32单片机-低功耗设置
  17. WIN7双系统卸载与重装Ubuntu
  18. 概率与数理统计的发展前景
  19. 【PAT】PAT_1168_Prime_Day
  20. 中国香港地铁站经纬度(百度坐标系)

热门文章

  1. python 3.5 import theano ::hypot error
  2. 中缀表达式-后缀表达式M
  3. Linux---主机字节序与网络字节序
  4. python 绘制围棋棋盘_奇思妙想(2)五子棋棋盘落子
  5. i3处理器_英特尔低端霸主酷睿I3处理器又降10元!机器怎么配?为粉丝答疑
  6. 要是有力气的话可以做装卸工,月入过万不是梦
  7. 大多数人贫穷到极致时,就是富人灾难的开始,你认同这句话吗?
  8. 什么样的领导最有魅力?
  9. 互联网连菜市场也不放过
  10. 两个“敢”,是销售员必须懂的心法