首页 > 试题广场 >

抽奖

[编程题]抽奖
  • 热度指数:1329 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解

小A在玩一个网络游戏。这个游戏有个抽装备环节。装备池总共有n+m件装备,分别为n件普通装备和m件ssr装备。抽一次装备的费用按你抽中的装备决定。

抽中每一件装备的概率都为1/(n+m)。如果你抽中了ssr装备。这次的抽装备费用为2金币,否则这次的费用为1金币。如果你抽中了ssr装备,得到奖励,并且装备不会放回。如果你抽中了普通装备。得到奖励,但是这件装备会放回装备池。现在小A希望抽中所有的ssr装备,请你计算一下:需要花费金币的期望值。


输入描述:
输入一行:n,m(1<=n,m<=106)


输出描述:
抽中所有的ssr装备,需要花费金币的期望值。输出保留2位有效小数。
示例1

输入

2 1

输出

4.00
示例2

输入

2 2

输出

7.00
示例3

输入

5 6

输出

24.25
n,m=map(int,input().split(' '))
res=0
for i in range(m,0,-1):
    res+=(n+2*i)/i

print(f"{res:.2f}")
直观理解。不一定准确,但确实是这样的结果。只需分别求单次抽取所需金币的期望,以及此状态下抽取ssr装备次数的期望。次数期望*金币期望就是此时装备池抽到一个ssr装备所需的金币,然后依次减少一个ssr装备重复上述过程。
假设当前装备池有n个普通装备,i个ssr装备。单次抽取所需金币期望=1n/(n+i)+2i/(n+i)=(n+2i)/(n+i)。爆ssr装备所需次数期望为单次抽到ssr装备概率的倒数,即为(n+i)/i。二者相乘,此装备池状态下抽到一个ssr装备所需金币=(n+2i)/i=2+n/i.
编辑于 2024-04-03 21:10:44 回复(0)
五行代码搞定:
import sys

n, m = map(int, input().split())
result = 0

for i in range(m):
result += (m + n - i) / (m-i)
print(f'{(result + m):.2f}')

编辑于 2024-03-30 07:38:54 回复(0)

问题信息

上传者:小小
难度:
2条回答 4216浏览

热门推荐

通过挑战的用户

抽奖