20110805 组队赛b题

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,都为整数,HP1/AP2<=1000&&HP2/AP1<=1000)

Output

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

Sample Input

2 1 1 1

Sample Output

75.0000

这道题是道关于概率的题~

#include"cstdio"
#include"math.h"
using namespace std;
int main()
{
	int hp1,hp2,ap1,ap2;
	int m,n;
	double temp,op;
	int i;
	while(scanf("%d%d%d%d",&hp1,&hp2,&ap2,&ap2)!=EOF)
	{
		m=hp1/ap2+((hp1%ap2==0)?0:1); //前者最多被打m下~
		n=hp2/ap1+((hp2%ap1==0)?0:1); //后者最多被打n下~
		op=0;
		temp=pow(0.5,n); //后者若输~则发生的所有攻击中~必有n下是前者攻击后者~
		for(i=1;i<=m;i++)
		{
			op+=temp;
			temp=temp*(n+i-1)/i/2; //可以发生i下后者对前者的攻击~概率为f(i)=C(n+i,i)*0.5^i~又因为f(i)/f(i-1)=(n+i-1)/i*0.5~所以有此式~
		}
		printf("%.4lf\n",op*100);
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值