UVa 1639 - Candy(数学期望 + 精度处理)
链接:
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(数学期望 + 精度处理)相关推荐
- 数学期望和概率DP题目泛做(为了对应AD的课件)
题1: Uva 1636 Headshot 题目大意: 给出一个000111序列,注意实际上是环状的.问是0出现的概率大,还是当前是0,下一个还是0的概率大. 问题比较简单,注意比较大小: A/C & ...
- Candy UVA 1639 (数学期望)
Candy UVA 1639 (数学期望) 有两个盒子各有n颗糖(n<=2*105),从两个盒子取糖的概率为p和1-p,直到一个盒子没糖,求另一个盒子中糖的个数的数学期望. 期望公式为: E=∑ ...
- uva 11762 数学期望+记忆化搜索
题目大意:给一个正整数N,每次可以在不超过N的素数中随机选择一个P,如果P是N的约数,则把N变成N/p,否则N不变,问平均情况下需要多少次随机选择,才能把N变成1? 分析:根据数学期望的线性和全期望公 ...
- 数论小白都能看懂的数学期望讲解
-1.灌水 这里阅读应该效果更佳 想了解更多关于数论的内容,可戳这里 感谢@command_block 大佬提出宝贵建议 也感谢洛谷及UVA的相关题目 如果有小瑕疵可以在评论区提出 内容可能有点多但很 ...
- python 数学期望_python机器学习笔记:EM算法
完整代码及其数据,请移步小编的GitHub 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/MachineLearningNote EM算法也称期望最大化 ...
- 218 扑克牌(数学期望)
1. 问题描述: Admin 生日那天,Rainbow 来找 Admin 玩扑克牌.玩着玩着 Rainbow 觉得太没意思了,于是决定给 Admin 一个考验.Rainbow 把一副扑克牌(54 张) ...
- 数学期望 极小值的几种求法
前言: 其中一维搜索方法这种思想,在图像二值化里面有应用.像二维码算法里面的条形码二值化,就是这种算法的进阶版. 缺点是只能按照一个方向进行搜索,且步伐需要调整. 目录: 数学期望例子 一维搜索方法求 ...
- 随机变量的数字特征(数学期望,方差,协方差与相关系数)
戳这里:概率论思维导图 !!! 数学期望 离散型随机变量的数学期望 (这里要求级数绝对收敛,若不绝对收敛,则E(X)不存在) 如果有绝对收敛,则有 ,其中 连续型随机变量的数学期望 (这里要求绝对收敛 ...
- 解题报告(一)F、(2018 ACM - ICPC shenyang I)Distance Between Sweethearts(数学期望 + 乘法原理 + FWT)(4.5)
繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量题解和代码,题目难度不一定按照题号排序,我会在每道题后面加上题目难度指数(1∼51 \sim 51∼5),以模板题难度 11 ...
最新文章
- 计算机一级多选题没有选分,计算机一级多选题
- 1190 最小公倍数之和 V2
- CF528C. Data Center Drama(欧拉回路,构造)
- leetcode979. 在二叉树中分配硬币(dfs)
- 组态王串口服务器虚拟串口,串口服务器USR-N520连接组态王设置步骤
- python爬虫源代码_【Python每日一问】Python爬虫能做什么?
- Mysql高可用方案mmm
- 储存程序是现代计算机的,A、信息论B、存储程序原理C、现代计算机理论D.DOC
- # 研究杂感 × VOSviewer(第六辑)
- 罗永浩直播带货卖了1.1亿,更高级的自我认知【附直播卖货商业计划书PPT】
- OLED多级菜单记录
- KSO-C#语言2021年落选,Python获年度编程语言
- 如何编写智能合约(Smart Contract)?(II)建立加密代币
- 445端口的用处和禁用
- 【Ubuntu18.04 无法找到终端 ifconfig 命令】
- STM32单片机-低功耗设置
- WIN7双系统卸载与重装Ubuntu
- 概率与数理统计的发展前景
- 【PAT】PAT_1168_Prime_Day
- 中国香港地铁站经纬度(百度坐标系)