Problem Description 
枫之羽认为自己很强,想当武林盟主,于是找现任武林盟主氢氧化铜挑战。氢氧化铜欣然接受了挑战,两人约好于下个月的月圆之夜在HDU校园内的三根柱子上进行决战。这场PK赛肯定能吸引武林中所有人前来观战,所以他们找了有商业运作潜力的经济人你,让你来组织这场百年一见的世纪之战,假设两人都有一定的血HP1、HP2.HP1是枫之羽的,HP2是氢氧化铜的。他们也有一定攻击力AP1、AP2,AP1是枫之羽的,AP2是氢氧化铜的。当进行攻击时,对方的HP减少自己的攻击力,比如HP1=2 HP2=1 AP1=1 AP2=1,当氢氧化铜攻击枫之羽时,枫之羽的HP=2(原先的HP1)-1(氢氧化铜的AP2)=1。现在两个人对决很多回合,每回合不是枫之羽攻击氢氧化铜,就是氢氧化铜攻击枫之羽。求枫之羽能赢氢氧化铜成为下任武林盟主的的胜率。

Input 
该题含有多组测试数据,每行为HP1,HP2,AP1和AP2 (1<=HP1,HP2,AP1,AP2<=32767) 

Output 
每组数据输出一行,为枫之羽赢氢氧化铜概率的值 (结果保留4位小数). 

Sample Input 
2 1 1 1 

Sample Output 
75.0000

题解:

公式推导: 
设: 
枫之羽为x,氢氧化铜为y 
x需要打n次才能打败y 
y需要打k次才能打败x 
一个回合中,x打y的概率 = y打x的概率 = 0.5 
要x赢,则x必须打n次,而y可以打0次,1次,2次……k-1次,而且最后一次当然必须是x打的,所以(设y打i次),那么一共打n+i次,要在前n+i-1次选i次让x被y打

所以x赢的概率 = 
C(n+0-1,0)*0.5^n + C(n+1-1,1)*0.5^(n+1) + …… + C(n+i-1,i)*0.5^(n+i)……

所以有公式:

但是组合数会很大,怎么办……于是要用到取对数的方法 
找规律: 

设double型变量c,使c = lg(C(n+i-1, i)) 
不断递推出c 

#include <iostream>
#include <string.h>
#include <cmath>
#include <stdio.h>
using namespace std;
int main()
{
int hp1,hp2,ap1,ap2;
while (cin>>hp1>>hp2>>ap1>>ap2)
{
int n=(hp2+ap1-)/ap1;//甲要打乙的次数
int m=(hp1+ap2-)/ap2;//乙要打甲的次数
//如果甲赢了,那么甲要打乙n次,甲挨揍的次数比如为cnt次,cnt<=m-1;
//那么甲战胜乙就是:甲打了n次,乙打了0~m-1次的几率之和
double ans=pow(0.5,n);//每次甲打败乙的几率,此时乙打了0次
double tmp=;
for(int i=;i<=m-;i++) //乙打i次甲获胜的概率,取对数
{
tmp=tmp+log10(n+i-1.0)-log10(i+0.0);
ans=ans+pow(10.0,tmp+(n+i)*log10(0.5));
//如果这里写成ans=ans+pow(10.0,tmp)*pow(0.5,n+i),会wa,因为pow(0.5,n+i)太小会被忽略
}
printf("%.4lf\n",ans*);
}
return ;
}

HDU 1410 PK武林盟主的更多相关文章

  1. hdu 1410

    Ref : http://www.clanfei.com/2012/04/772.html 可推出公式: ans=sigma[C(N1-1,i)*0.5^(N1+i)] (0<=i<=N2 ...

  2. hdu 1410(直线与矩形相交)

    Intersection Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 13528   Accepted: 3521 Des ...

  3. 转载:hdu 题目分类 (侵删)

    转载:from http://blog.csdn.net/qq_28236309/article/details/47818349 基础题:1000.1001.1004.1005.1008.1012. ...

  4. hdu 4481 Time travel(高斯求期望)(转)

    (转)http://blog.csdn.net/u013081425/article/details/39240021 http://acm.hdu.edu.cn/showproblem.php?pi ...

  5. hdu 4967 Handling the Past

    hdu 4967 Handling the Past view code//把时间离散化,维护一个线段(线段l到r的和用sum[l,r]表示),pop的时候就在对应的时间减一,push则相反 //那么 ...

  6. HDU——PKU题目分类

    HDU 模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 ...

  7. HDU 5446 Unknown Treasure Lucas+中国剩余定理

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5446 Unknown Treasure 问题描述 On the way to the next se ...

  8. hdu 5446 Unknown Treasure lucas和CRT

    Unknown Treasure Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?p ...

  9. HDU 4333 Revolving Digits 扩展KMP

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=4333 题意:给以数字字符串,移动最后若干位到最前边,统计得到的数字有多少比原来大,有多少和原来同样,有多少 ...

随机推荐

  1. day3-python的函数及参数

    函数式编程最重要的是增强代码的重用性和可读性 1 2 3 4 def 函数名(参数):     ...     函数体     ... 函数的定义主要有如下要点: def:表示函数的关键字 函数名:函 ...

  2. Python(模块(modue)、包(package))

    ''' 一 模块 模块一共三种: python标准库 第三方模块 应用程序自定义模块 模块两种执行方式: 1 用于启动执行 2 用于被调用执行 key:import module: 将执行文件(mod ...

  3. python2 跟3的区别

    1----python2:1 臃肿 , 源码的重复量很多2:语法不清晰,掺杂着 c,pyp,java,的一些陋习 python3: 几乎是重构后的源码,规范 清晰 优美 2.python的分类 分为编 ...

  4. Codeforces Round #303 (Div. 2)

    A.Toy Cars 题意:给出n辆玩具车两两碰撞的结果,找出没有翻车过的玩具车. 思路:简单题.遍历即可. #include<iostream> #include<cstdio&g ...

  5. 一个很牛的计算pi的c程序!

    C语言是面向过程的一种高级程序设计语言,它在世界范围内使用很广泛,而且很流行.很多大型的应用软件,基本上是用C语言所编写的.在对操作系统以及系统使用程序.需要对硬件进行操作的场合,C语言较其他的高级语 ...

  6. 第六课 GDB调试 (上)

    1序言: 1.初学者经过学习前面的Makefile知识,信心满满,内心觉得应该要好好学习不单掌握语言的编写,也要学会相对应的工具调高开发效率.有时我们写出来的代码经过执行结果却跟我们预期不一样那怎么办 ...

  7. 用python实现0到9之间10个数字排列不重复的个数

      """ product 笛卡尔积 permutations 排列 combinations 组合,没有重复 combinations_with_replacement ...

  8. bug最后汇总-2018/08/03

    一.对于点击后请求时间过长的按钮 现象:容易给用户点击无效的错觉,从而导致多次点击,从而发出多个相同请求,这显然是不符合我们意愿的 解决: 用户点击发出多个请求:加个锁,当用户点击后,将锁关闭,使用户 ...

  9. powerdesign初级入门教程

    首先我们需要创建一个测试数据库,为了简单,我们在这个数据库中只创建一个Student表和一个Major表.其表结构和关系如下所示. 看看怎样用PowerDesigner快速的创建出这个数据库吧. 1. ...

  10. 【Head First Servlets and JSP】笔记

    1.谈到服务器的时候,可能是指物理主机(硬件),也可能是指Web服务应用(软件). 2.谈到客户的时候,通常指人类用户,或者是浏览器应用,或者两者都包括,浏览器应用做些什么?发送请求.解释HTML和呈 ...