题目大意:


每一轮有pl的概率得到正面的牌,pd的概率得到负面的牌,1-pl-pd的概率得到无属性牌。

每一轮过后,都有p的概率结束游戏,1-p的概率开始下一轮。

问期望有多少轮后正面的牌数严格大于负面的牌数。

题解:


设\(f[i]\)表示期望有\(f[i]\)轮后含有\(i\)张有属性牌。

\(g[i]\)在i张有属性牌的前提下,正面的牌数严格大于负面的牌数的概率。

\(Ans=\sum_{i=0}^nf[i]*g[i]\)

可以感受到\(n\)大概做个\(10^7\)就够了。

设\(F(x)=\sum_{i>=1}f[i]x^i\)

\(F(x)=\sum_{i=1}^{+∞}(1-p)^{i-1}*((pl+pd)x+(1-pl-pd))^i\)

上式可以化简为\({ax+b \over cx+d}\)的形式。

记一步化简为\((ax+b)/(1-cx)\)。

这个是常系数齐次线性递推的标准形式:

若有\(F={A \over 1-bx}\),则\(F(1-bx)=A->F=F·bx+A\),

可以得到这个递推的次数=1,并且0-1次项是定值,因为A的是1次的。

所以手推\(f[0]、f[1]\),即可\(f[i]=f[i-1]*b(i>=2)\)

\[g[x]=
\begin{equation}
\left\{
\begin{array}{**lr**}
0&,x=0\\
g[x-1]-\binom{x-1}{x/2}×p1^{x/2}×p2^{x/2}&,x是偶数\\
g[x-1]+\binom{x-1}{(x-1)/2}×p1^{(x-1)/2+1}×p2^{(x-1)/2}&,x是奇数
\end{array}
\right.
\end{equation}
\]

注意后面那堆东西不能直接算,会爆精度,也需要递推。

Code:


#include<bits/stdc++.h>
#define fo(i, x, y) for(int i = x, B = y; i <= B; i ++)
#define ff(i, x, y) for(int i = x, B = y; i < B; i ++)
#define fd(i, x, y) for(int i = x, B = y; i >= B; i --)
#define ll long long
#define pp printf
#define hh pp("\n")
#define db long double
using namespace std; int num, T;
db pl, pd, p; const int N = 1000;
db f[2][2 * N + 5]; int o;
db s[N + 5]; db calc(db st, db q) {
return st * (-q) / (q - 1);
} const db eps = 1e-9; db calc2(db p, db w) {
db c = (1 - p) * w;
return (1 - p) * (1 - w) * (-c) / (c - 1);
} int main() {
freopen("augury.in", "r", stdin);
freopen("augury.out", "w", stdout);
scanf("%d", &num);
for(scanf("%d", &T); T; T --) {
scanf("%Lf %Lf %Lf", &pl, &pd, &p);
if(p == 1) {
pp("%.15Lf\n", pl);
continue;
}
db w = 1 - pl - pd, ans = 0;
db ps = pl + pd, p1 = pl / ps, p2 = pd / ps;
db p3 = abs(w) < eps ? (1 - p) : calc2(p, w);
memset(f, 0, sizeof f);
f[0][N] = 1 / (1 - p);
fo(i, 1, N) {
s[i] = 0;
fo(j, N - i, N + i) {
f[!o][j] = (f[o][j - 1] * pl + f[o][j + 1] * pd + f[o][j] * w);
f[!o][j] *= (1 - p);
ans += f[!o][j] * (j > N);
s[i] += f[!o][j] * (j > N);
}
o = !o;
}
if(abs(s[N - 1]) > eps) ans += calc(s[N], s[N] / s[N - 1]);
pp("%.15Lf\n", ans);
}
}

2019.7.3模拟 光影交错(穷举+概率dp)的更多相关文章

  1. 20190716NOIP模拟赛T1 礼物(概率dp+状压)

    题目描述 夏川的生日就要到了.作为夏川形式上的男朋友,季堂打算给夏川买一些生 日礼物. 商店里一共有种礼物.夏川每得到一种礼物,就会获得相应喜悦值Wi(每种 礼物的喜悦值不能重复获得). 每次,店员会 ...

  2. [CSP-S模拟测试]:糊涂图(概率DP)

    题目传送门(内部题76) 输入格式 第一行输入三个空格隔开的整数$n,m,s$表示随机加一条边之前的糊涂图的点数,边数,以及起点的编号. 接下来$m$行,每行两个空格隔开的整数$a,b$表示从$a$到 ...

  3. [CSP-S模拟测试]:抽卡(概率DP)

    题目描述 水上由岐最近在肝手游,游戏里有一个氪金抽卡的活动.有$n$种卡,每种卡有 3 种颜色.每次抽卡可能什么也抽不到,也可能抽到一张卡.每氪金一次可以连抽 m 次卡,其中前$m−1$次抽到第$i$ ...

  4. 对动态规划(Dynamic Programming)的理解:从穷举开始(转)

    转自:http://janfan.cn/chinese/2015/01/21/dynamic-programming.html 动态规划(Dynamic Programming,以下简称dp)是算法设 ...

  5. [C++11][算法][穷举]输出背包问题的所有可满足解

    关于背包问题的题目,前人之述备矣,这里只讨论实现 输入: n ca w_1 v_1 w_2 v_2 ... w_n v_n 其中,n是物品总数,ca是背包大小,w_n是第n个物品的重量,v_n是第n个 ...

  6. C#穷举

    穷举:  穷举法的基本思想是根据题目的部分条件确定答案的大致范围, 并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕.若某个情况验证符合题目的全部条件,则为本问题的一个解:若全部情况验证后都 ...

  7. C#语句2——循环语句(for穷举、迭代和while循环)

    一.for循环拥有两类: (一).穷举: 把所有可能的情况都走一遍,使用if条件筛选出来满足条件的情况. 1.单位给发了一张150元购物卡,拿着到超市买三类洗化用品.洗发水15元,香皂2元,牙刷5元. ...

  8. 穷举、迭代、以及while代替for循环的使用

    for循环的穷举: 就是所有情况走一遍,使用if筛选出符合的情况. while循环分为2个格式 (1)先判断再做while(){}(2)不管对错,先做了在判断do{}whlie() 百鸡百钱的whil ...

  9. 2016年10月10日--穷举、迭代、while循环

    穷举 将所有可能性全部全部走一遍,使用IF筛选出满足的情况 练习: 1.单位给发了一张150元购物卡, 拿着到超市买三类洗化用品. 洗发水15元,香皂2元,牙刷5元. 求刚好花完150元,有多少种买法 ...

随机推荐

  1. ie中datepicker赋值不成功

    解决办法:删除placeholder即可 比如我代码如下:

  2. 使用SOAPui 笔记

    对接Oracle Fusion Application的SOAP. 遇到 <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soa ...

  3. cdq分治(陈丹琦分治)

    //转自:http://blog.csdn.net/snowy_smile/article/details/49668689 /* 算法介绍之cdq分治: 其实cdq分治的思想与应用都能被很简单地描述 ...

  4. 【网络】Ping 的TTL理解

    一.含义 “TTL”是生存时间(Time To Live)的意思 关于时间与跳的讨论, https://www.zhihu.com/question/61007907 一开始理解为time to le ...

  5. HTML5的新增功能有哪些?

    HTML5 将成为 HTML.XHTML 以及 HTML DOM 的新标准. 新的功能: 1.用于绘画的 canvas 元素 2.用于媒介回放的 video 和 audio 元素 3.对本地离线存储的 ...

  6. Ruby——输入&输出

    Ruby的输入和输出操作.输入是程序从键盘.文件或者其他程序读取数据.输出是程序产生数据.可以输出到屏幕.文件或者其他程序. Ruby中的一些类有些方法会执行输入&输出操作.例如Kernel. ...

  7. Android中查看当前Activity是否销毁

    进入到Android-sdk中platform-tools目录 在命令行中执行以下命令 adb shell dumpsys activity>activity.txt 可以将当前的四大组件(Ac ...

  8. fiddler对浏览器、app抓包及证书安装

    1.fiddler对浏览器抓包 1.1 对浏览器的http的抓包 Capturing开启,进行抓包: Capturing关闭,停止抓包: 如下图:  1.2 对浏览器的https抓包 1.2.1 开启 ...

  9. Web移动端常见问题-摘抄

      一.按钮点击时出现黑色背景 解决方法: 1 2 .class { -webkit-tap-highlight-color:rgba(0,0,0,0);} .class { -webkit-appe ...

  10. java程序中线程cpu使用率计算

    原文地址:https://www.imooc.com/article/27374 最近确实遇到题目上的刚需,也是花了一段时间来思考这个问题. cpu使用率如何计算 计算使用率在上学那会就经常算,不过往 ...