CF312B Archer

题目传送门

分析

首先分析样例。
小 R 第一箭就射中的概率是 1 2 \frac{1}{2} 21,但是他也有 1 2 \frac{1}{2} 21的概率射不中,这个时候他就只能祈祷另一个人射不中,此时的概率就是 1 2 × ( 1  ⁣ −  ⁣ 1 2 ) = 1 4 \frac{1}{2}\times(1\!-\!\frac{1}{2})=\frac{1}{4} 21×(121)=41,接着又轮到小 R,他需要射中才能赢,所以这次他获胜的概率是 1 2 ∗ 1 4 = 1 8 \frac{1}{2}*\frac{1}{4}=\frac{1}{8} 2141=81,以此类推。
推导:
每次小 R,射完一次箭,有 a b \frac{a}{b} ba的概率赢,但是他有 b − a b \frac{b-a}{b} bba的概率射不中,此时要获胜需要对方 d + c d \frac{d+c}{d} dd+c的概率也射不中,在轮到小 R,以 a b \frac{a}{b} ba的概率来射。
X = b − a b × d + c d X=\frac{b-a}{b}\times\frac{d+c}{d} X=bba×dd+c,小 R 获胜的概率为:
a b + a b ⋅ X + a b ⋅ X 2 + a b ⋅ X 3 + … \frac{a}{b}+\frac{a}{b}\cdot X+\frac{a}{b}\cdot X^2+\frac{a}{b}\cdot X^3+\ldots ba+baX+baX2+baX3+
可以发现这是一个等比数列。
设原式为 S S S,因为 x < 0 x<0 x<0,所以 x ∞ ≈ 0 x^\infty\approx0 x0,那么 S ≈ a b S\approx\frac{a}{b} Sba
S ⋅ X = a b ⋅ X + a b ⋅ X 2 + a b ⋅ X 3 + … S\cdot X=\frac{a}{b}\cdot X+\frac{a}{b}\cdot X^2+\frac{a}{b}\cdot X^3+\ldots SX=baX+baX2+baX3+
S S S 减去 S ⋅ X S\cdot X SX得到 S ⋅ ( 1 − X ) = a b − X ∞ ≈ a b S\cdot(1-X)=\frac{a}{b}-X^\infty\approx\frac{a}{b} S(1X)=baXba,那么:
S = S ⋅ ( 1 − X ) 1 − X = a b 1 − X S=\frac{S\cdot(1-X)}{1-X}=\frac{\frac{a}{b}}{1-X} S=1XS(1X)=1Xba
所以,最后的答案就是:
a b 1 − b − a b × d + c d \frac{\frac{a}{b}}{1-\frac{b-a}{b}\times\frac{d+c}{d}} 1bba×dd+cba

#include<bits/stdc++.h>
using namespace std;
signed main(){
	double a,b;
	scanf("%lf%lf",&a,&b);
	double x=a/b;
	double nox=1-x;
	scanf("%lf%lf",&a,&b);
	double y=a/b;
	double noy=1-y;
	double ans=x/(1-nox*noy);
	printf("%.13lf",ans);
}
posted on 2025-07-07 19:57  fish2012  阅读(5)  评论(0)    收藏  举报  来源