题目:
弓箭手
弓箭手 SmallR 和 Zanoes 在进行一场比赛。他们轮流射击,SmallR 先射。每次射击,SmallR 都有 a/b 的概率命中靶心,而 Zanoes 有 c/d 的概率命中靶心。先命中靶心的赢得比赛。求 SmallR 赢得比赛的概率。
思路:
似乎,只用在[0,1]区间操作好多好多次,每次把剩下的部分分成三段,一段给smallr,一段给zanoes,再剩下来的一段继续分。
嗯,来自lyd的思路:
p=a/b q=(1-a/b)*(1-c/d) 0<q<1p+p*q+p*q^2+p*q^3+.... =p*(1+q+q^2+q^3+...) =p*(1-q^oo)/(1-q) =p/(1-q)
代码:
#include<bits/stdc++.h> using namespace std;#define ll long long #define db doubledb a,b,c,d;void readin() {
scanf("%lf%lf%lf%lf",&a,&b,&c,&d); }int main() {
readin();db l=0,r=1;for(int i=1;i<=100000;i++) {
db len=r-l;l=l+len*(a/b);r=r-(r-l)*(c/d);if(l==r) break;}printf("%.12lf",l);return 0; }