• 今天来尝试了几道数学期望相关的题,这是我认为比较有趣的一道题
  • 这次不废话啦直接开始~

  • 一句话题意:两个分别装有n个糖果的盒子,每次随机选一个盒子然后拿走一颗糖(选的概率分别是\(p\)和\((1-p)\)),直到有一次选了一个盒子打开之后发现没有糖果了,求另一个盒子糖果个数的期望值
  • \(n<=2*10^5\)

嗯首先我们得知道期望的线性性质:\(E(X+Y)=E(X)+E(Y)\)

  • 如果我们假设最后打开的是第一个盒子,那么第二个盒子的糖果个数其实可能有\(0~n\)个,如果已经知道了有\(i\)个的概率就好了,这样根据期望的线性性质答案就是把所有的\(i*P(i)\)加起来(当然还要考虑最后打开第二个盒子)

  • 好的我们现在来具体考虑第二个盒子有\(i\)个糖果的情况,第二个盒子还有\(i\)个的话那么在这之前盒子一定被打开过了\(n+n-i=2n-i\)次(\(n\)次取第一个盒子,\(n-i\)次取第二个),这样一来概率就是\(C(2n-i,n)p^{n+1}(1-p)^{n-i}\)(因为在这之前取了\(n\)次第一个盒子,这次又取了一次)

  • 然后每次枚举一下\(i\)对两种情况(最后打开第一个或第二个盒子)求个和是不是就可以了?

  • 蓝鹅这样子在理论上是正确的,但是实际求的时候\(C(2n-i,n)\)可以挺大的,而\(p^{n+1}\)和\((1-p)^{n-i}\)会很小,直接算的话会有精度误差(当然如果你要写高精度我也不拦你~),而且这个误差应该会比较大,大概超出了题目的要求(我之前改进后过程用double好像都wa掉了…),那么怎么办呢?

  • 紫书上关于这题介绍了一种取对数的处理方法,具体来说就是在算的过程中全部取对数(我这里是\(e\)为底啦…不过好像一般也都是这样),比如最后打开第一个盒子时第二个盒子有\(i\)个糖果的概率取\(e\)的对数就是\(v1(i)=ln(C(2n-i,n))+(n+1)ln(p)+(n-i)ln(1-p)\)啦(第二个盒子的情况同理),最后把答案加上\(i(e^{v1(i)}+e^{v2(i)})\)就好啦~

  • 预处理阶乘的对数的时候注意可能会用到\(n\)的两倍

  • 再具体的话就没什么好说的啦

  • 还是存一下代码吧~

      #include<cstdio>
    #include<cmath>
    typedef long double ldouble;
    const int N=200005;
    ldouble p,LogF[N<<1];
    inline double getC(int n,int k)
    {
    return LogF[n]-LogF[k]-LogF[n-k];
    }
    inline double solve(int n)
    {
    double ans=0.0;
    for(int i=0;i<=n;i++)
    {
    ldouble c=getC(2*n-i,n);
    ldouble v1=c+log(p)*(n+1)+log(1-p)*(n-i);
    ldouble v2=c+log(p)*(n-i)+log(1-p)*(n+1);
    ans+=i*(exp(v1)+exp(v2));
    }return ans;
    }
    int main()
    {
    int n,kase=0;LogF[0]=0;
    for(int i=1;i<(N<<1);i++)LogF[i]=LogF[i-1]+log(i);
    while(scanf("%d%Lf",&n,&p)==2)
    printf("Case %d: %.6lf\n",++kase,solve(n));
    return 0;
    }

如果有错欢迎指出~

撒椛~(雾)

[水题日常]UVA1639 糖果(Candy,ACM/ICPC Chengdu 2012)的更多相关文章

  1. codevs 3070 寻找somebody4(水题日常)

     时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold   题目描述 Description 有一天.....sb不见了,有个人要去找他..他发现sb在一个杨辉三角里.. ...

  2. 每天一套题打卡|河南省第八届ACM/ICPC

    A 挑战密室 化学方程式求分子量 这题我懒得写了 可以用map<string,int>哈希表,表示每种分子的相对分子质量 之后,从头遍历到尾. 1.数字:连读直到不是数字 2.字母:连读直 ...

  3. [水题日常]Luogu1113 杂务

    这几天又在颓. 我的blog难度目前还比较低,主要面向像我这样子的新手(当然内容也会尽量讲得具体清楚一些)x 如果有错误还请指出~ 写完随笔之后才去翻了一下这题题解之后才注意到这题是有序的 QAQ完全 ...

  4. codevs 1487 大批整数排序(水题日常)

     时间限制: 3 s  空间限制: 16000 KB  题目等级 : 黄金 Gold 题目描述 Description !!!CodeVS开发者有话说: codevs自从换了评测机,新评测机的内存计算 ...

  5. 51nod 1096 距离之和最小(水题日常)

    基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 X轴上有N个点,求X轴上一点使它到这N个点的距离之和最小,输出这个最小的距离之和.   Input 第1行:点的数量 ...

  6. [水题日常]UVA11181 条件概率(Probability|Given)

    话说好久没写blog了 好好学概率论的第一天,这题一开始完全不会写,列出个条件概率的公式就傻了,后来看着lrj老师的书附带的代码学着写的- 因为我比较弱智 一些比较简单的东西也顺便写具体点或者是按照书 ...

  7. vijos 1034 家族(水题日常)

    描述 若某个家族人员过于庞大,要判断两个是否是亲戚,确实还很不容易,现在给出某个亲戚关系图,求任意给出的两个人是否具有亲戚关系. 规定:x和y是亲戚,y和z是亲戚,那么x和z也是亲戚.如果x,y是亲戚 ...

  8. 洛谷 P1181 数列分段Section I(水题日常)

    题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入输出格式 输入格式: 输入文件divide_ ...

  9. codevs 2728 整数帝国问题(水题日常)

    时间限制: 1 s  空间限制: 16000 KB  题目等级 : 白银 Silver 题目描述 Description 在很久以前,在遥远的东方,有一个整数帝国,它里面里居住着大量的正整数,了缓解都 ...

随机推荐

  1. 简单实用的Boom 3D进阶使用教程分享

    对于初学者来说,简单体验Boom 3D的3D环绕音效,就可以通过普通耳机享受到高品质耳机的动人音效.而对于进阶者来说,Boom 3D灵活的预设功能,能让其享受到自由调整均衡器.低音的乐趣. 图1:Bo ...

  2. yii2 删除数据

    直接 model 删除 $model = User::find($id); $model->delete(); 带有条件的删除 $connection ->createCommand() ...

  3. yii2-imagine的使用

    <?php /** * 图片常用处理 * * 需要 yii/yii2-imagine 的支持 * php composer.phar require --prefer-dist yiisoft/ ...

  4. Python GUI之Tkiner实战

    前言 Tkinter 是 Python 的标准 GUI 库.Python 使用 Tkinter 可以快速的创建 GUI 应用程序. 由于 Tkinter 是内置到 python 的安装包中.只要安装好 ...

  5. github搭建html网站到外网

    最近想自己弄个网站,但又没有服务器可以用,只好借用强大得github来帮忙了,不过GitHub确实有这个功能. 感谢以下大佬得教程,非常得详细,但我觉得还是有必要记录下来. 大佬链接: https:/ ...

  6. 虚拟机VM14.X安装Mac10.12启动出现问题的解决方法

    虚拟机安装Mac系统,会出现的问题太多,于是乎变记录下来,方便以后使用或者方便大家解决问题. 一:VM14.X安装Mac10.12虚拟机,启动出现下面无限重启问题 解决方法: 亲测有效 在OS X 1 ...

  7. Java蓝桥杯——逻辑推理练习题

    逻辑推理题 谁是贼? 公安人员审问四名窃贼嫌疑犯.已知,这四人当中仅有一名是窃贼,还知道这四人中每人要么是诚实的,要么总是说谎.在回答公安人员的问题中: 甲说:"乙没有偷,是丁偷的.&quo ...

  8. LeetCode 022 Generate Parentheses

    题目描述:Generate Parentheses Given n pairs of parentheses, write a function to generate all combination ...

  9. javascript开发后端程序的神器nodejs

    目录 简介 nodejs的历史 nodejs简介 nodejs的运行环境 process 终止进程 env argv CLI交互 exports模块 nodejs API nodejs的框架 简介 j ...

  10. 自动化运维工具之Puppet模块

    前文我们了解来puppet的变量.流程控制.正则表达式.类和模板的相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/14079208.html:今天我们来 ...