HDU_3910 Liang Guo Sha
来源:互联网 发布:黑马程序员好吗 编辑:程序博客网 时间:2024/04/29 09:08
http://acm.hdu.edu.cn/showproblem.php?pid=3910
题意:
这个题目看了网上的好多题意说明,感觉和我理解的都有一些小小的出入,也不知道是我理解错了还是没有理解他们的意思, 下面我就说下我的理解吧,首先我们假设Alice出1的概率是x,Bob出1的概率是y,我们用EA(x,y)表示Alice在两者出1的概率分别为x和y的期望得分,那么我们很容易可以推出下面的式子:EA(x,y) = a*x*y+b*(1 - x)*(1 - y) - x*(1 - y)*c - y*(1 - x)*c = y * ( (a + b + 2*c)*x - (b + c) ) + b - (b + c)*x ,化简到这里之后我们就可以开始讨论了,因为题目的意思是要你求在某个x下,无论y取什么值,得出的最小的那个EA最大,那么我们就可以这样去考虑:当 x >= (b + c) / (a + b + 2 * c ) 时 ,y前面的系数是正的,因此作为最小的EA一定是y = 0 的时候取到,也就是说, 这个时候的EA(x) = b - (c + b) * x ,其中 x >= (b + c) / (a + b + 2 * c ) 。 当x < (b + c) / (a + b + 2 * c )时,这时候y前面的系数是负的,当取某个x的时候,y取遍所有的值使得EA最小的那个y一定是1,这样此时的EA(x) = (a + c)*x - c ,其中x < (b + c) / (a + b + 2 * c ) ,这样我们就可以发现在 x >= (b + c) / (a + b + 2 * c ) 时,EA是单调递减的,所有最大的EA = b - (c + b) * (b + c) / (a + b + 2 * c ) = ( a*b - c*c ) / (a + b + 2 * c) 。同理也可以证明当 x<(b + c) / (a + b + 2 * c )时EA的最大值也是该值。综上所述可以得到最大的EA应该是 : ( a*b - c*c ) / (a + b + 2 * c) 。
代码:
#include <stdio.h>#include <string.h>const double eps = 1e-10 ;double a , b , c ;int main(){ while( scanf("%lf %lf %lf",&a,&b,&c) == 3){ double ans = ( a*b - c*c ) / (a + b + 2*c) ; printf("%.6lf\n",ans + eps ); } return 0 ;}
- HDU_3910 Liang Guo Sha
- hdu_3910 Liang Guo Sha(概率论)
- hdu 3910 Liang Guo Sha
- hdu 3910 Liang Guo Sha
- HDU 3910 Liang Guo Sha
- Hdu 3910 Liang Guo Sha
- HDU 3910 Liang Guo Sha
- hdoj-3910-Liang Guo Sha
- hdu3910 Liang Guo Sha(期望)
- San Guo Sha
- liang
- Guo Lun
- sha
- sha
- sha
- SHA
- Li Liang
- Liang Zhen
- C#温故而知新学习系列之.NET框架高级特性—如何在.NET框架中自定义属性类?(三)
- sql server 2005 等待阻塞资源的最长时间
- 安装oracle时候报错
- Facebook疑在新西兰测试新广告 再不行动就“非死不可”了?
- 如何加载新分区
- HDU_3910 Liang Guo Sha
- ARM开发板上iconv_open("GB2312", "UTF-8") 调用失败的解决方法
- Building your First App
- struts1的多文件上传
- VB InstrRev函数
- 程序员在上海(4)
- MooseFS源代码分析(二)——mfsmount模块
- VC++ 编译链接错误
- fstab的内容说明