博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 2318 Spoj4060 game with probability Problem
阅读量:6361 次
发布时间:2019-06-23

本文共 1502 字,大约阅读时间需要 5 分钟。

题目链接

题解

f[i]f[i]f[i]表示Alice胜的概率,g[i]g[i]g[i]表示Bob胜的概率,aaa表示Alice抛出正面的概率,bbb表示Bob抛出正面的概率,则:

f[i]=a×g[i−1]+(1−a)×g[i]g[i]=b×f[i−1]+(1−b)×f[i] f[i]=a\times g[i-1]+(1-a)\times g[i]\\ g[i]=b\times f[i-1]+(1-b)\times f[i] f[i]=a×g[i1]+(1a)×g[i]g[i]=b×f[i1]+(1b)×f[i]
化简得到
f[i]=a×g[i−1]+(1−a)×b×f[i−1]a+b−a×bg[i]=b×f[i−1]+(1−b)×a×g[i−1]a+b−a×b f[i]=\frac{a\times g[i-1]+(1-a)\times b\times f[i-1]}{a+b-a\times b}\\ g[i]=\frac{b\times f[i-1]+(1-b)\times a\times g[i-1]}{a+b-a\times b} f[i]=a+ba×ba×g[i1]+(1a)×b×f[i1]g[i]=a+ba×bb×f[i1]+(1b)×a×g[i1]
可以看出,当f[i−1]>g[i−1]f[i-1]>g[i-1]f[i1]>g[i1]时,a=1−p,b=1−qa=1-p,b=1-qa=1p,b=1q,否则a=p,b=qa=p,b=qa=p,b=q。初值f[0]=0,g[0]=1f[0]=0,g[0]=1f[0]=0,g[0]=1

但是O(n)O(n)O(n)的转移显然会TLE,事实上,当nnn很大时,概率几乎不再改变,因此当n>100n>100n>100时可以认为n=100n=100n=100

代码

#include 
#include
const int maxn=100;int t,n;double p,q,f[maxn+10],g[maxn+10];int main(){
scanf("%d",&t); while(t--) {
scanf("%d%lf%lf",&n,&p,&q); f[0]=0; g[0]=1; n=std::min(n,maxn); for(int i=1; i<=n; ++i) {
double a,b; if(f[i-1]>g[i-1]) {
a=1-p; b=1-q; } else {
a=p; b=q; } f[i]=(a*g[i-1]+(1-a)*b*f[i-1])/(a+b-a*b); g[i]=(b*f[i-1]+(1-b)*a*g[i-1])/(a+b-a*b); } printf("%.6lf\n",f[n]); } return 0;}

转载于:https://www.cnblogs.com/Canopus-wym/p/10376126.html

你可能感兴趣的文章
linux基础命令(4)
查看>>
七夕情人节,赵强老师视频课程全场7.7折!Oracle最低一折!
查看>>
Extjs的文件上传问题
查看>>
以链接克隆方式创建vSphere虚拟机
查看>>
Managed File Transfer and Network Solutions
查看>>
物联网的遐想和展望
查看>>
iphone 软件开发让我们的事业有着一个更大的发展平台
查看>>
iOS自定义控件:自定义TableView、CollectionView空数据占位图
查看>>
如何将一个String和多个String值进行比较
查看>>
Spring Cloud Netflix—如何加入Hystrix
查看>>
extjs链接
查看>>
链表倒数第n个节点
查看>>
最长公共子序列Lcs(打印路径)
查看>>
0618图的整理
查看>>
TextView图文混排
查看>>
监控linux流量python版
查看>>
SQL索引建立遵守六大铁律
查看>>
S老师 破坏神学习
查看>>
webstorm使用帮助(转自http://my.oschina.net/longteng2013/blog/138010),另外有部分内容摘自其它人博客...
查看>>
Linux服务器部署系列之八—Sendmail篇
查看>>