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×(1−21)=41,接着又轮到小 R,他需要射中才能赢,所以这次他获胜的概率是
1
2
∗
1
4
=
1
8
\frac{1}{2}*\frac{1}{4}=\frac{1}{8}
21∗41=81,以此类推。
推导:
每次小 R,射完一次箭,有
a
b
\frac{a}{b}
ba的概率赢,但是他有
b
−
a
b
\frac{b-a}{b}
bb−a的概率射不中,此时要获胜需要对方
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=bb−a×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+ba⋅X+ba⋅X2+ba⋅X3+…
可以发现这是一个等比数列。
设原式为
S
S
S,因为
x
<
0
x<0
x<0,所以
x
∞
≈
0
x^\infty\approx0
x∞≈0,那么
S
≈
a
b
S\approx\frac{a}{b}
S≈ba。
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
S⋅X=ba⋅X+ba⋅X2+ba⋅X3+…
用
S
S
S 减去
S
⋅
X
S\cdot X
S⋅X得到
S
⋅
(
1
−
X
)
=
a
b
−
X
∞
≈
a
b
S\cdot(1-X)=\frac{a}{b}-X^\infty\approx\frac{a}{b}
S⋅(1−X)=ba−X∞≈ba,那么:
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=1−XS⋅(1−X)=1−Xba
所以,最后的答案就是:
a
b
1
−
b
−
a
b
×
d
+
c
d
\frac{\frac{a}{b}}{1-\frac{b-a}{b}\times\frac{d+c}{d}}
1−bb−a×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);
}
浙公网安备 33010602011771号