CodeForces 312BBUPT 2015 newbie practice #3A Archer

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeForces 312BBUPT 2015 newbie practice #3A Archer相关的知识,希望对你有一定的参考价值。

SmallR is an archer. SmallR is taking a match of archer with Zanoes. They try to shoot in the target in turns, and SmallR shoots first. The probability of shooting the target each time is 技术分享 for SmallR while 技术分享 for Zanoes. The one who shoots in the target first should be the winner.

Output the probability that SmallR will win the match.

Input

A single line contains four integers 技术分享.

Output

Print a single real number, the probability that SmallR will win the match.

The answer will be considered correct if the absolute or relative error doesn‘t exceed 10 - 6.

Sample test(s)
input
1 2 1 2
output
0.666666666667

 题意:给出两个弓箭手的射中目标的概率(分数),两人轮流射击,求第一位弓箭手赢的概率(小数)

分析:第一位弓箭手赢,那么第一次就射中或者,第一次不中而第二个弓箭手也不中,第二次中,……

因此所求=第一位射中概率+(第一位不中概率*第二位不中概率)*第一位射中概率+(第一位不中概率*第二位不中概率)*(第一位不中概率*第二位不中概率)*第一位射中概率+……=第一位射中概率*(1+(第一位不中概率*第二位不中概率)+(第一位不中概率*第二位不中概率)²+(第一位不中概率*第二位不中概率)³+......)

题目要求误差小于1e-6,刚开始我的代码是下面这样

#include<stdio.h>
int main(){
    double a,b,c,d,ans,u;
    scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
    ans=1;u=1;
    while(u*a/b>=1e-6){//改成-7、-8也会WA,-9可过
        u*=(1-a/b)*(1-c/d);
        ans+=u;
    }
    printf("%lf\n",ans*a/b);
    return 0;
}

因为当u*a/b<1e-6时ans继续加下去,可能比当前ans大不止1e-6,因为后面加了好几次;较好的解决方法是用等比数列求和公式

s=(1-qn)/(1-q),当n趋于无穷时,因为0<q<1,所以s=1/(1-q)

q=(1-a/b)*(1-c/d),ans=s*a/b.

#include<stdio.h>
int main(){
    double a,b,c,d,ans,u;
    scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
    ans=1/(1-(1-a/b)*(1-c/d));
    printf("%.12lf\n",ans*a/b);
    return 0;
}

进行化简一下得到

#include<stdio.h>
int main(){
    double a,b,c,d,ans,u;
    scanf("%lf%lf%lf%lf",&a,&b,&c,&d);
    printf("%.12lf\n",a*d/(a*d+b*c-a*c));
    return 0;
}

 

以上是关于CodeForces 312BBUPT 2015 newbie practice #3A Archer的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #353 (Div. 2) D. Tree Construction (二分,stl_set)

[codeforces]Goodbye_2015

[codeforces]Goodbye_2015

Codeforces Hello2015第一题Cursed Query

宽搜ECNA 2015 D Rings (Codeforces GYM 100825)

codeforces Looksery Cup 2015 H Degenerate Matrix