JZOJ-senior-5949. 【NOIP2018模拟11.04】人生赢家

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/HuangXinyue1017/article/details/83868322

Time Limits: 1000 ms Memory Limits: 131072 KB

Description

众所周知,DH是一位人生赢家,他不仅能虐暴全场,而且还正在走向人生巅峰;

在巅峰之路上,他碰到了这一题:

每次生成一个[0,n)的随机整数,如果这个随机数和给出的m个数字中的其中一个数字相等,那么就停止生成随机数,否则继续生成,求出所有生成的数的和的期望。

Input

在这里插入图片描述

Output

输出一行一个实数表示期望,保留6位小数,
注意了本题没有SPJ,必须和答案完全相同才能通过本题

Sample Input

2 1
1

Sample Output

1.000000

Data Constraint

在这里插入图片描述

Hint

在这里插入图片描述

Solution

假设在第 i i 次中选中了 m m 个数中的一个
那么答案就是 i = 1 i + ( n m n ) i 1 1 n n ( n 1 ) 2 \sum_{i=1}^{i\to+\infty}(\frac{n-m}{n})^{i-1}*\frac{1}{n}*\frac{n(n-1)}{2}
化简可得 a n s = n ( n 1 ) 2 m ans=\frac{n(n-1)}{2m}

Code

#include<cstdio>

using namespace std;

int n,m;

int main()
{
	freopen("winner.in","r",stdin);
	freopen("winner.out","w",stdout);
	scanf("%d%d",&n,&m);
	double ans=(double)(n-1)*(double)n/m*0.5;
	printf("%.6lf",ans);
}

猜你喜欢

转载自blog.csdn.net/HuangXinyue1017/article/details/83868322