题解 | #相信我,这真的是一个暴力!#
相信我,这真的是一个暴力!
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);
}

查看15道真题和解析