http://codeforces.com/problemset/problem/98/E (题目链接)

题意

  A君有n张牌,B君有m张牌,桌上还有一张反扣着的牌,每张牌都不一样。

  每个回合可以做两件事中的一件

  • 猜测桌上的牌是什么,猜对则胜,猜败则输。
  • 询问对方是否有某张牌,若有则需要将其示出,否则继续游戏。

  A和B都很聪明,问A的胜率。

Solution

  碉堡了!!转自:http://blog.csdn.net/Yves___/article/details/51814024

  首先不到最后一刻是不会选择猜桌上的牌的。

  假如某一次对方问了一张自己手上没有的牌,就可能会怀疑桌上的牌就是这张。

  而询问对方是否有某张牌,我们可以选择询问自己手上有的牌,假如对方相信而去猜测这张牌的话就会输掉,我们称这样的行为作欺骗。

  记$f(n,m)$表示先手有$n$张牌,后手有$m$张牌,先手的获胜概率。

  那么就可以列一个表格,表示先手的选择以及后手的应对。

  • 先手选择猜测对方的牌

    • 后手认为先手在猜测,先手获胜的概率是$\displaystyle\frac{m}{m+1}(1-f(m-1,n))$
    • 后手认为先手在欺骗,先手获胜的概率是$\displaystyle\frac{1}{ m+1 } + \frac{m}{m+1}(1-f(m-1,n))$
  • 先手选择欺骗

    • 后手认为先手在猜测,先手获胜的概率是$\displaystyle 1$
    • 后手认为先手在欺骗,先手获胜的概率是$\displaystyle 1-f(m,n-1)$

  那么对于先手的任意一个策略,后手会选择最优的策略去使他赢的概率尽可能小。也就是说假如先手用$p$的概率选择去猜测,$1−p$的概率选择去欺骗。那么最终的贡献就是

$$\max\limits_p \left\{ \min \left\{ \frac{pm}{m+1}( 1-f( m-1, n ) )+(1-p), \frac{p}{ m+1 } + \frac{pm}{ m+1 }( 1-f( m-1, n )) + (1-p)(1-f( m, n-1)) \right\} \right\}$$

  将$p$视为自变量,问题就转化为两条直线取$min$的问题,求个交点就可以得到最大值。

细节

  直线的交点别求错了。。

代码

// codeforces 98E
#include<algorithm>
#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<cmath>
#define LL long long
#define Pi acos(-1.0)
#define free(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
using namespace std; double g[1010][1010]; double f(int n,int m) {
if (!n) return 1.0/(m+1);
if (!m) return 1.0;
if (g[n][m]) return g[n][m];
double A=(1-f(m-1,n))*m/(m+1);
double B=(1-f(m-1,n))*m/(m+1)+1.0/(m+1);
double C=1.0;
double D=1-f(m,n-1);
double p=(D-C)/((A-C)-(B-D));
return g[n][m]=p*A+(1-p)*C;
}
int main() {
int n,m;
scanf("%d%d",&n,&m);
printf("%.10lf %.10lf",f(n,m),1-f(n,m));
return 0;
}

【Codeforces 98E】 Help Shrek and Donkey的更多相关文章

  1. 【Codeforces 98E】 Help Shrek and Donkey 游戏策略神题

    from http://www.cnblogs.com/MashiroSky/p/6576398.html A君有n张牌,B君有m张牌,桌上还有一张反扣着的牌,每张牌都不一样. 每个回合可以做两件事中 ...

  2. 【codeforces 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  3. 【codeforces 707E】Garlands

    [题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...

  4. 【codeforces 707C】Pythagorean Triples

    [题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...

  5. 【codeforces 709D】Recover the String

    [题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...

  6. 【codeforces 709B】Checkpoints

    [题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...

  7. 【codeforces 709C】Letters Cyclic Shift

    [题目链接]:http://codeforces.com/contest/709/problem/C [题意] 让你改变一个字符串的子集(连续的一段); ->这一段的每个字符的字母都变成之前的一 ...

  8. 【Codeforces 429D】 Tricky Function

    [题目链接] http://codeforces.com/problemset/problem/429/D [算法] 令Si = A1 + A2 + ... + Ai(A的前缀和) 则g(i,j) = ...

  9. 【Codeforces 670C】 Cinema

    [题目链接] http://codeforces.com/contest/670/problem/C [算法] 离散化 [代码] #include<bits/stdc++.h> using ...

随机推荐

  1. LOJ #6074. 「2017 山东一轮集训 Day6」子序列

    #6074. 「2017 山东一轮集训 Day6」子序列 链接 分析: 首先设f[i][j]为到第i个点,结尾字符是j的方案数,这个j一定是从i往前走,第一个出现的j,因为这个j可以代替掉前面所有j. ...

  2. Python - 列表解析式

    列表解析——用来动态地创建列表 [expr for iter_var in iterable if cond_expr] 例子一: map(lambda x: x**2, range(6)) [0, ...

  3. 安装Visual Studio开发平台

    1.找一个VS2013的安装包,下载到D盘上,勾选相应的选项安装. 安装的过程很漫长,至少需要一个小时. 2.安装已完成,启动. . 3.登录. \ 4启动VS2013. 5.新建c#类库 6.输入代 ...

  4. 四则运算 C 语言

    #include<stdio.h>void main(){ char c; float x,y; int result; scanf("%c %f %f",&c ...

  5. 撰写POPUSH需求文档

    不当家不知柴米贵,撰写了正规的软件需求文档才知道软件工程的复杂性 感谢@洪宇@王需@江林楠下午的加班加点,五个人正闷在406B奋斗中,加油!

  6. Echarts学习求教

    有没有人用过百度的Echarts?刚开始接触,下面这段代码怎么理解啊,新手求指教: myChart.showLoading();$.get('data/asset/data/les-miserable ...

  7. tensorflow在windows下的安装

    1.python 的安装 这里我选择的是Anaconda4.2,附上下载链接https://www.continuum.io/downloads 2.测试python安装是否成功 在cmd中输入pyt ...

  8. Ajax的使用~~~整理

    之前对于ajax没有详细的学习,只是碰到的时候,就记一点,不是很有条理.虽然常用的都会用,但真经不起询问,知其然而不知其所以然,所以专门看了一下<JavaScript高级程序设计>中对aj ...

  9. HDU 1236 排名(Microsoft_zzt)

    http://acm.hdu.edu.cn/showproblem.php?pid=1236 Problem Description 今天的上机考试虽然有实时的Ranklist,但上面的排名只是根据完 ...

  10. HDU 2071 Max Num

    http://acm.hdu.edu.cn/showproblem.php?pid=2071 Problem Description There are some students in a clas ...