codeforces312B

版权声明:我这么弱的蒟蒻,虽然博文不是很好,但也请标明转发地址喵! https://blog.csdn.net/ACerAndAKer/article/details/82795924

数学

第一个人能先射中的概率有
第一次就射中的概率 a
前两次两个人都没射中,第三次射中 ( 1 a ) ( 1 b ) a (1-a)*(1-b)*a
前四次两个人都没射中,四五次射中 ( 1 a ) 2 ( 1 b ) 2 a (1-a)^2*(1-b)^2*a
然后以此类推,最终结果就是这些相加,然后这样可以一直加下去,所以我们定义一个下界,我用的1e-9,就是说两次结果相差不超过1e-9,就可以跳出了

代码

//By AcerMo
#include<cmath>
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
double a,b,c,d; 
signed main()
{
	cin>>a>>b>>c>>d;
	a/=b;c/=d;
	double ans=a,que=0,tmp=1;
	while (abs(ans-que)>1e-9)
	{
		que=ans;
		tmp*=(1-a)*(1-c);
		ans+=tmp*a;
	}
	printf("%.12lf",ans);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/ACerAndAKer/article/details/82795924