小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)