题目大意:


每一轮有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. ListView封装实现下拉刷新和上拉加载(方式2)(转载)

    转自:http://blog.csdn.net/jdfkldjlkjdl/article/details/70229465 这次使用的是系统的SwipeRefreshLayout实现下拉刷新,和设置L ...

  2. mysql 使用 insert ignore into和unique实现不插入重复数据功能

    执行插入操作,如果数据库中不存在才插入,否则就不插入 首先需要通过unique指定唯一约束字段 然后写sql语句的时候就写  insert ignore into () valuse () 这样就能实 ...

  3. SpringBoot集成Swagger(Swagger的使用),生成接口文档,方便前后端分离开发

    首先上一张成果图.  1.Maven依赖 <dependency> <groupId>io.springfox</groupId> <artifactId&g ...

  4. k8s-1.16 二进制安装

    环境机器配置: 172.16.153.70 master 172.16.77.121 node1 172.16.77.122 node2 系统初始化 [root@iZbp1c31t0jo4w553hd ...

  5. 对Map的key按升序进行排序

    //对Map的key按升序进行排序 List<Map.Entry<Integer,Task>> mappingList = new ArrayList<Map.Entry ...

  6. 单调栈+线段树——cf1220F

     首先考虑初始排列,pi会让周围所有比其大的元素深度+1,所以要求每个点的深度,只要其被覆盖了几次即可 这个覆盖可以通过处理每个元素的左右边界(单调栈O(n))+线段树区间更新(Ologn(n))来做 ...

  7. html常用标签梳理

    标签的语法 标签由英文尖括号<和>括起来,如<html>就是一个标签. html中的标签一般都是成对出现的,分开始标签和结束标签.结束标签比开始标签多了一个/. 如: (1)& ...

  8. Vue2.0源码思维导图-------------Vue 初始化

    上一节看完<Vue源码思维导图-------------Vue 构造函数.原型.静态属性和方法>,这节将会以new Vue()为入口,大体看下 this._init()要做的事情. fun ...

  9. ArcMAP中Excel数据转换为shp数据

    参考百度知道:http://jingyan.baidu.com/article/f7ff0bfc1cf22c2e26bb138d.html 将数据库中带有X.Y坐标的二维表转换为空间点数据:从数据中将 ...

  10. Java-Class-FC:java.lang.StringBuilder

    ylbtech-Java-Class-FC:java.lang.StringBuilder 1.返回顶部   2.返回顶部 1. @Override public String toString() ...