题解 | #相信我,这真的是一个暴力!#

相信我,这真的是一个暴力!

https://ac.nowcoder.com/acm/problem/255602

知识点:几何分布期望

从简单的题目入手,方便理解

一、某人抛一枚均匀硬币,直到出现正面为止,求他平均要抛多少次?

因为只有正反2种结果,所以单次成功的概率为

几何分布期望公式:

答案 = = 2


二、假设甲、乙两人下棋,每局:

甲赢的概率:0.3

乙赢的概率:0.2

平局概率:0.5

他们一直下,直到分出胜负就停,求平均要下多少局?

这里注意问法“分出胜负”,即甲赢或者乙赢都算进概率,和这道题的所求概率方式是相同的(每个和尚赢的概率都计入,概率求和)

p分出胜负=p甲赢+p乙赢=0.3+0.2=0.5

ans =

三、回到本题

题目给的是两人分别有石头剪刀布的百分比权重(加起来都是10),比如

瘦和尚:5 石头 4 剪刀 1 布

胖和尚:1 石头 3 剪刀 6 布

总共有10x10 = 100种可能的对局

可能性分为瘦和尚赢、胖和尚赢、平局。

赢的情况计算方式:

如瘦和尚的石头对上胖和尚的剪刀,为5 x 3 = 15局,即这种情况的概率为;

瘦和尚的剪刀对上胖和尚的布,为4x6 = 24局,概率为;

然后是瘦和尚的布对上胖和尚的石头,三种情况概率相加就是瘦和尚赢的总概率,胖和尚的概率按照此方法类推。

① 算瘦和尚赢的情况

石头赢剪刀:5 × 3 = 15

剪刀赢布:4 × 6 = 24

布赢石头:1 × 1 = 1

瘦赢 = 15 + 24 + 1 = 40

② 算胖和尚赢的情况

石头赢剪刀:1 × 4 = 4

剪刀赢布:3 × 1 = 3

布赢石头:6 × 5 = 30

胖赢 = 4 + 3 + 30 = 37

③ 总分胜负情况

40 + 37 = 77,即 P(ans) =

又根据几何分布期望公式:

四、特殊情况的处理

样例2给出了二者出一样选择(石头)的概率均为10成,这个时候会平局,永远决不出胜负!

这个时候代入上述求概率和的式子,不难发现所求p = 0,所以增加一个值为0的判断输出Sorry,NoBruteForce。

五、代码实现

Python3

t = int(input())
while t > 0:
    a,b,c = map(int,input().split())
    x,y,z = map(int,input().split())
    wina = a*y+b*z+c*x
    winb = x*b+y*c+z*a
    if wina+winb == 0:print("Sorry,NoBruteForce")
    else:
        p = (wina+winb)/100
        E = 1/p
        print(E)
    t -= 1

JavaScript v8

T = parseInt(readline());
while(T--){
    let [a1,b1,c1] = readline().split(' ').map(Number);
    let [a2,b2,c2] = readline().split(' ').map(Number);
    let win1 = a1*b2+b1*c2+c1*a2;
    let win2 = a2*b1+b2*c1+c2*a1;
    let total = win1+win2;
    total === 0 ? print("Sorry,NoBruteForce") : print(100/total);
}
全部评论

相关推荐

政委qqq:这道题在算法竞赛里唯一考的就是高精度,但是只能难住C++这类语言,Python直接a+b秒天秒地
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务