Description

有一个盒子,每个时刻有pl的概率往里面放一个白球,有pd的概率往里面放一个黑球,1-pl-pd的概率什么都不干,然后每个时刻末尾有p的概率直接结束过程
问所有满足“白球数量大于黑球数量”的时刻的数量的期望
所有读入的实数均保留5位小数

Solution

其实是JS的省队集训
考虑设f[i]表示,所有满足有i个球的时刻的期望,g[i]表示,i个球中,白球>黑球的概率
那么 A n s = ∑ i ≥ 1 f [ i ] ∗ g [ i ] Ans=\sum_{i\ge 1}f[i]*g[i] Ans=∑i≥1​f[i]∗g[i]
设F(x)为f的生成函数,我们有 F ( x ) = ∑ i ≥ 1 ( 1 − p ) i − 1 [ ( p l + p d ) x + ( 1 − p l − p d ) ] i F(x)=\sum_{i\ge 1}(1-p)^{i-1}[(pl+pd)x+(1-pl-pd)]^i F(x)=i≥1∑​(1−p)i−1[(pl+pd)x+(1−pl−pd)]i
设 a = 1 − p , b = ( p l + p d ) x + 1 − p l − p d a=1-p,b=(pl+pd)x+1-pl-pd a=1−p,b=(pl+pd)x+1−pl−pd,那么 F ( x ) = ∑ i ≥ 1 a i − 1 b i = b 1 − a b F(x)=\sum_{i\ge 1}a^{i-1}b^i={b\over 1-ab} F(x)=∑i≥1​ai−1bi=1−abb​
考虑将F(x)写成 b c − d x = b / c 1 − d / c x {b\over {c-dx}}={b/c\over 1-d/c x} c−dxb​=1−d/cxb/c​,可以发现F(x)存在一个一阶的线性递推
只需要求出 f [ 1 ] = ∑ i ≥ 1 ( 1 − p ) i − 1 ( 1 − p l − p d ) i − 1 i ( p l + p d ) = p l + p d ( 1 − ( 1 − p ) ( 1 − p l − p d ) ) 2 f[1]=\sum_{i\ge 1}(1-p)^{i-1}(1-pl-pd)^{i-1}i(pl+pd)={pl+pd\over (1-(1-p)(1-pl-pd))^2} f[1]=∑i≥1​(1−p)i−1(1−pl−pd)i−1i(pl+pd)=(1−(1−p)(1−pl−pd))2pl+pd​,即可递推计算
注意到当x大于某个界的时候f[x]已经很小了,所以只用保留前面的项
再考虑g[i],注意这里计算的是条件概率需要/总概率,即 p l ′ = p l / ( p l + p d ) , p d ′ = p d / ( p l + p d ) pl'=pl/(pl+pd),pd'=pd/(pl+pd) pl′=pl/(pl+pd),pd′=pd/(pl+pd)
当n为奇数时, g [ n ] = g [ n − 1 ] ∗ ( p l ′ + p r ′ ) + p l ′ ∗ ( n − 1 n − 1 2 ) ∗ p l ′ n − 1 2 ∗ p r ′ n − 1 2 g[n]=g[n-1]*(pl'+pr')+pl'*\binom{n-1}{n-1\over 2}*pl'^{n-1\over 2}*pr'^{n-1\over 2} g[n]=g[n−1]∗(pl′+pr′)+pl′∗(2n−1​n−1​)∗pl′2n−1​∗pr′2n−1​,表示加上前n-1白=黑,且第n个为白
当n为偶数时, g [ n ] = g [ n − 1 ] ∗ ( p l ′ + p r ′ ) + p r ′ ∗ ( n − 1 n 2 ) p l ′ n 2 ∗ p r ′ n 2 − 1 g[n]=g[n-1]*(pl'+pr')+pr'*\binom{n-1}{n\over 2}pl'^{n\over 2}*pr'^{{n\over 2}-1} g[n]=g[n−1]∗(pl′+pr′)+pr′∗(2n​n−1​)pl′2n​∗pr′2n​−1,表示减去前n-1里白=黑+1,且第n个为黑
后面的组合数部分也可以直接递推
然后就做完了

Code

#include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define fo(i,a,b) for(int i=a;i<=b;i++)
#define fd(i,a,b) for(int i=a;i>=b;i--)
using namespace std;typedef double db;const int N=1e7+5;
const db eps=1e-15;int id,ty;
db pl,pd,p,f[N],g[N],c[N];int main() {freopen("augury.in","r",stdin);freopen("augury.out","w",stdout);scanf("%d",&id);for(scanf("%d",&ty);ty;ty--) {scanf("%lf%lf%lf",&pl,&pd,&p);db P=(1-p)*(1-pl-pd);db a=1-(1-p)*(1-pl-pd),b=(1-p)*(pl+pd);a=b/a;f[1]=1/(1-P)/(1-P)*(pl+pd);int n=1;while (1) {n++;f[n]=f[n-1]*a;if (f[n]<eps) break;}a=pl/(pl+pd);b=pd/(pl+pd);db ans=0;fo(i,0,n) {if (i&1) {if (i==1) c[i]=a;else c[i]=c[i-2]*a*b*(i-1)*i/(i>>1)/((i+1)>>1);g[i]=g[i-1]+c[i-1]*a;} else {if (!i) c[i]=1;else c[i]=c[i-2]*4*a*b*(i-1)/i;g[i]=g[i-1]-c[i-1]*b;}ans+=f[i]*g[i];}printf("%.10lf\n",ans);}return 0;
}

[校内模拟]光影交错相关推荐

  1. 2017.6.11 校内模拟赛

    题面及数据及std(有本人的也有原来的) :2017.6.11 校内模拟赛 T1 自己在纸上模拟一下后就会发现 可以用栈来搞一搞事情 受了上次zsq 讲的双栈排序的启发.. 具体就是将原盘子大小cop ...

  2. 第十四届蓝桥杯校内模拟赛第二期-Java个人题解(仅供参考)

    刚刚结束第十四届蓝桥杯校内模拟赛第二期,在这记录下自己的代码 不保证正确! 不保证正确! 不保证正确! 有问题一起改正!! 题解 2048 代码: package _14届模拟2;public cla ...

  3. 2021年 第十二届蓝桥杯第二期校内模拟赛题解(Java版)

    时隔多日,终于会写一些简单DP了哈哈哈! 稍微改版,方便阅读,若有错,请指出 2019年 第十届蓝桥杯省赛题解(JavaB组版) 2020年 第十一届蓝桥杯第一场省赛题解(JavaB组版) 2020年 ...

  4. 蓝桥杯校内模拟赛_C++组

    蓝桥杯校内模拟赛 填空题 填空题比较简单,只需要在空格中填写整数答案即可: 在计算机存储中,15.125GB是多少MB? 解题思路: 1GB=1024MB,打开系统计算器计算即可 答案: 15488 ...

  5. 第十四届蓝桥杯校内模拟赛第一期——Python

    第十四届蓝桥杯校内模拟赛第一期--Python 文章目录 第十四届蓝桥杯校内模拟赛第一期--Python 1.二进制位数 问题描述 参考答案 扩展 2. 晨跑 问题描述 参考答案 扩展 3. 调和级数 ...

  6. 【蓝桥】软件校内模拟赛(二)反倍数 题目+题解

    文章目录 前言 反倍数 题目描述 前言 本题解为第十一届软件类校内模拟赛个人题解,但非官方满分题解,因此,可能存在下列问题 题意理解错误,导致答案错误. 代码中存在一些问题,导致答案错误. 算法复杂度 ...

  7. 【蓝桥】第十一届软件类校内模拟赛(二)填空题部分

    起晚了起晚了,比赛都快结束了才整完qwq 文章目录 前言 填空题 1题目描述 2题目描述 3题目描述 4题目描述 前言 本题解为第十一届软件类校内模拟赛个人题解,但非官方满分题解,因此,可能存在下列问 ...

  8. [蓝桥杯第十一届校内模拟赛] Apare_xzc

    华中师范大学蓝桥杯第十一届校内模拟赛 2020/3/22 8:00-12:00 题目还是比省赛要简单的,我9:25就做完了. 第一题 分析: 简单题,求给定的1200000的正约数的个数.我们可以暴力 ...

  9. 【校内模拟】【18-10-16】长者 【主席树】【哈希】

    (拖更N天终于想起来我还有博客 ) (校内模拟的题面&代码联赛后解除封印~) 题解 1.0 这次是正经的分析 把题目概括一下,进行认真分析,我们可以依次得到以下信息(由浅至深): 1.考虑骗分 ...

最新文章

  1. 如何在10亿个整数中找出前1000个最大的数?
  2. 程序员的“认知失调”
  3. Jupyter notebook 多行注释 输出注释的文本
  4. ITK:计算两个3D点之间的距离
  5. MFC内嵌web页面
  6. 图论——Dijkstra+prim算法涉及到的优先队列(二叉堆)
  7. npm install报错 npm ERR,code ERESOLVE npm ERR,ERESOLVE unable to resolve dependency tree
  8. 1.1 linux介绍
  9. buildroot 使用本地交叉编译器记录
  10. 服务器登记信息查询,勤哲Excel服务器数据查询
  11. 【JAVA】数据结构——堆的排序及相关面试题
  12. 按摩新方法(辅助药物治疗肝,肾,肺等慢性疾病)
  13. 天梯赛:L2-016 愿天下有情人都是失散多年的兄妹 (25 分)
  14. python turtle 太极八卦图
  15. 信息系统项目管理师必背核心考点(六十八)数字证书、数字签名
  16. makefile初识
  17. NetBeans使用Consolas中文乱码的解决
  18. vcs_lab_2006_lab3 Debugging with DVE
  19. Openssl 生成自签名证书
  20. 分布式的版本控制工具(Git)

热门文章

  1. c语言iomanip头文件的作用,#includeiomanip.h在C语言中代表什么
  2. 简单使用 Accessibility 及 Android 适配 TalkBack,实现适老化和无障碍
  3. C++函数模板的详细讲解【函数模板的概念、用法及其模板函数的概念知识】
  4. gis中的加权求和工具在哪里_ArcGIS教程:加权叠加
  5. 关于云服务器介绍?什么是阿里云服务器管理?
  6. echarts模拟从数据库异步加载数据
  7. 你不知道的 Chrome DevTools 实用技巧大全!(收藏)
  8. 7-39 QQ Account Management (25 分)【c++】【中英文】
  9. Linux系统she-bang介绍
  10. 取消算法推荐,是技术上的倒退吗?