博弈论+dp+概率

提交链接-

题意不是很好懂

Ai 表示剩 i 个石头、 A 先手的获胜概率。

Bi 表示剩 i 个石头、 B先手的获胜概率。

如果想选,对于 Ai:

有 p 的概率进入 Bi−1 ;有 1−p 的概率进入 Bi

所以 fi=p∗Bi−1+(1−p)∗Bi

如果想选,对于 Bi:

有 q 的概率进入 Ai−1 ;有 1−q 的概率进入 Ai

所以 gi=q∗Ai−1+(1−q)∗Ai

如果不想选, 把 p 变成 1 - p, q 变成 1 - q 即可

为了满足递推关系,我们把 Bi 带入到 Ai 的式子中,

整理得:

Ai=(p∗Bi-1 +(1−p)∗q∗Ai-1 )/(1-(1−p)∗(1−q))

Bi=(q∗Ai-1+(1−q)∗p∗Bi−1)/(1−(1−p)∗(1−q))

然后剩 i 个石头时A的想不想选的意愿与 Ai−1、Ai−1 的大小关系有关。

Ai−1>Bi−1 都不想选。

因为 A 如果选了,就到了 Bi - 1,获胜概率就小了

如果 B 选了, 就到了 Ai - 1, A的获胜概率就大了,B 的获胜概率就小了

Bi−1<Bi−1 都想选。

同理

然后对于不想选的情况,那么 p=1−p,q=1−q 就行了。

然而这样就没法用矩阵乘法了。。。

就需要黑科技,,当n很大时,其实概率已经基本不动了,,让n=min(n,1000)就好了.

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
int init() {
int rv = 0, fh = 1;
char c = getchar();
while(c < '0' || c > '9') {
if(c == '-') fh = -1;
c = getchar();
}
while(c >= '0' && c <= '9') {
rv = (rv<<1) + (rv<<3) + c - '0';
c = getchar();
}
return fh * rv;
}
int T, n;
double a[1005], b[1005], p, q;
int main() {
T = init();
while(T--) {
n = init();
n = min(n, 1000);
scanf("%lf%lf", &p, &q);
a[0] = 0.0; b[0] = 1.0;
for(int i = 1 ; i <= n ; i++) {
if(a[i - 1] > b[i - 1]) {p = 1 - p; q = 1 - q;}
a[i] = p / (1 - (1 - p) * (1 - q)) * b[i - 1] +
(1 - p) * q / (1 - (1 - p) * (1 - q)) * a[i - 1];
b[i] = q / (1 - (1 - p) * (1 - q)) * a[i - 1] +
(1 - q) * p / (1 - (1 - p) * (1 - q)) * b[i - 1];
if(a[i - 1] > b[i - 1]) {p = 1 - p; q = 1 - q;}
}
printf("%.6lf\n",a[n]);
}
return 0;
}

SPOJ 4060 A game with probability的更多相关文章

  1. SPOJ 375. Query on a tree (树链剖分)

    Query on a tree Time Limit: 5000ms Memory Limit: 262144KB   This problem will be judged on SPOJ. Ori ...

  2. Project Euler 100 : Arranged probability 安排概率

    Arranged probability If a box contains twenty-one coloured discs, composed of fifteen blue discs and ...

  3. BZOJ 2588: Spoj 10628. Count on a tree [树上主席树]

    2588: Spoj 10628. Count on a tree Time Limit: 12 Sec  Memory Limit: 128 MBSubmit: 5217  Solved: 1233 ...

  4. SPOJ DQUERY D-query(主席树)

    题目 Source http://www.spoj.com/problems/DQUERY/en/ Description Given a sequence of n numbers a1, a2, ...

  5. SPOJ GSS3 Can you answer these queries III[线段树]

    SPOJ - GSS3 Can you answer these queries III Description You are given a sequence A of N (N <= 50 ...

  6. 【BZOJ2318】Spoj4060 game with probability Problem 概率

    [BZOJ2318]Spoj4060 game with probability Problem Description Alice和Bob在玩一个游戏.有n个石子在这里,Alice和Bob轮流投掷硬 ...

  7. 【填坑向】spoj COT/bzoj2588 Count on a tree

    这题是学主席树的时候就想写的,,, 但是当时没写(懒) 现在来填坑 = =日常调半天lca(考虑以后背板) 主席树还是蛮好写的,但是代码出现重复,不太好,导致调试的时候心里没底(虽然事实证明主席树部分 ...

  8. SPOJ bsubstr

    题目大意:给你一个长度为n的字符串,求出所有不同长度的字符串出现的最大次数. n<=250000 如:abaaa 输出: 4 2 1 1 1 spoj上的时限卡的太严,必须使用O(N)的算法那才 ...

  9. Fuzzy Probability Theory---(3)Discrete Random Variables

    We start with the fuzzy binomial. Then we discuss the fuzzy Poisson probability mass function. Fuzzy ...

随机推荐

  1. 通过90行代码学会HTML5 WebSQL的4种基本操作

    Web SQL数据库API是一个独立的规范,在浏览器层面提供了本地对结构化数据的存储,已经被很多现代浏览器支持了. 我们通过一个简单的例子来了解下如何使用Web SQL API在浏览器端创建数据库表并 ...

  2. (转)SpringMVC学习(一)——SpringMVC介绍与入门

    http://blog.csdn.net/yerenyuan_pku/article/details/72231272 SpringMVC介绍 SpringMVC是什么? SpringMVC和Stru ...

  3. python学习(day1)

    一.在这次实训之前,虽然听说过很多次python这种语言,但是从来没有真正去学习过,仅仅知道它是一种目前十分流行且功能非常强大的语言,可以方便快捷的实现很多功能.今天的课程带我了解了python,并且 ...

  4. idea 发布和本地测试问题

    1.maven本地打包成jar 提示[错误: 找不到或无法加载主类]修改 配置maven ---->Runner---->VM Optins [-DarchetypeCatalog=loc ...

  5. C# Excel常用控件总结

    参考:https://blog.csdn.net/waterstar50/article/details/80590355 1.ClosedXML2.EPPlus 教程:http://www.cnbl ...

  6. URAL1765 Error 404

    题目描述: vjudge 题解: STO ljx OTZ 下面这个算法是这位贡献的. 不妨将删去改为加入. 那么对于$n=p^k$,即只有一个质因子的$n$来说,若$i$已选,那么$i+n/p$.$i ...

  7. Bzoj 2752 高速公路 (期望,线段树)

    Bzoj 2752 高速公路 (期望,线段树) 题目链接 这道题显然求边,因为题目是一条链,所以直接采用把边编上号.看成序列即可 \(1\)与\(2\)号点的边连得是. 编号为\(1\)的点.查询的时 ...

  8. 【贪心 堆】luoguP2672 推销员

    堆维护,贪心做法 题目描述 阿明是一名推销员,他奉命到螺丝街推销他们公司的产品.螺丝街是一条死胡同,出口与入口是同一个,街道的一侧是围墙,另一侧是住户.螺丝街一共有N家住户,第i家住户到入口的距离为S ...

  9. python 发送附件

    #!/usr/bin/env python # encoding: utf-8 #@author: 东哥加油! #@file: sksendmail.py #@time: 2018/8/20 13:3 ...

  10. linux centeros 通过 innoback 工具备份mysql 5.7 全库并自动压缩zip上传到备份服务器的脚本,附自动清理过期备份

    innoback 安装见连接:https://blog.csdn.net/fanren224/article/details/79693863 脚本解析后续将更新 181024:更新添加定期清理备份的 ...