小A在玩一个网络游戏。这个游戏有个抽装备环节。装备池总共有n+m件装备,分别为n件普通装备和m件ssr装备。抽一次装备的费用按你抽中的装备决定。
抽中每一件装备的概率都为1/(n+m)。如果你抽中了ssr装备。这次的抽装备费用为2金币,否则这次的费用为1金币。如果你抽中了ssr装备,得到奖励,并且装备不会放回。如果你抽中了普通装备。得到奖励,但是这件装备会放回装备池。现在小A希望抽中所有的ssr装备,请你计算一下:需要花费金币的期望值。
小A在玩一个网络游戏。这个游戏有个抽装备环节。装备池总共有n+m件装备,分别为n件普通装备和m件ssr装备。抽一次装备的费用按你抽中的装备决定。
抽中每一件装备的概率都为1/(n+m)。如果你抽中了ssr装备。这次的抽装备费用为2金币,否则这次的费用为1金币。如果你抽中了ssr装备,得到奖励,并且装备不会放回。如果你抽中了普通装备。得到奖励,但是这件装备会放回装备池。现在小A希望抽中所有的ssr装备,请你计算一下:需要花费金币的期望值。
输入一行:n,m(1<=n,m<=106)
抽中所有的ssr装备,需要花费金币的期望值。输出保留2位有效小数。
2 1
4.00
2 2
7.00
5 6
24.25
def cal_sum(a, b, q, n):
# 等差乘等比数列的求和公式
A = a/(q-1)
B = (b-A)/(q-1)
return (A*n+B)*q**(n)-B
def getCost(m, n):
# 剩余m件ssr,n件普通装备,第i次抽取一件ssr的期望为 E(i) = p2*(i+1)*p1^(i-1)
p1 = n/(m+n)
p2 = m/(m+n)
res = cal_sum(p2, p2, p1, 1000000000)
return res
line = input().split()
n, m = int(line[0]), int(line[1])
res = 0
for i in range(m, 0, -1):
res += getCost(i, n)
print("%.2f" % res) n,m=map(int,input().split(' '))
res=0
for i in range(m,0,-1):
res+=(n+2*i)/i
print(f"{res:.2f}")
#include <iostream>
using namespace std;
double GetSum(int n, int m){
double sum=0;
for(int i=1;i<m+1;i++){
sum+=(double)1/i;
}
return 2*m+n*sum;
}
int main() {
int n,m;
cin>>n>>m;
printf("%.2f",GetSum(n, m));
return 0;
} m = int(a[1])
n = int(a[0])
val = 2*m+n*sum([1/j for j in range(1, m+1)])
print("%.2f"%val)