JZOJ-5949——人生赢家 详细推导

Description

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

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

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

Input

第一行两个正整数 n , m n,m n,m
第二行 m m m 个整数 a i a_i ai 表示障碍,保证 a i a_i ai 两两不同。

Output

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

2 1
1

Sample Output

1.000000

Data Constraint

对于 20% 的数据 , 满足 n ≤ 10 n \leq 10 n10;

对于 30% 的数据 , 满足 n ≤ 1000 n \leq 1000 n1000;

对于 50% 的数据 , 满足 n ≤ 100000 n \leq 100000 n100000;

对于 100% 的数据 , 满足 n ≤ 1 0 7 , 1 ≤ m ≤ n , 0 ≤ a i ≤ n − 1 n \leq 10^7,1 \leq m \leq n, 0 \leq a_i \leq n-1 n107,1mn,0ain1;

这道题我们可以将情况想象成一棵树,其中每一层有 n n n 个节点,其中 m m m 个节点不能继续往下走,如这样:
JZOJ-5949——人生赢家 详细推导_第1张图片
众所周知,期望是概率乘总和

我们可以知道,到这一层的概率为 :
n − m n \frac{n-m}{n} nnm
即,共有 n n n 个点,其中 n − m n - m nm 个可以走。

而从最上面到达这一层的概率为 :
( n − m n ) i − 1 (\frac{n-m}{n})^{i-1} (nnm)i1

我们再推一步,将其设为 q q q
∑ i = 1 ∞ q i = a 1 1 − q n 1 − q \sum_{i=1}^{\infty} q^i = a_1\frac{1-q^n}{1-q} i=1qi=a11q1qn

a 1 a_1 a1 为 1, ∣ q ∣ ≤ 1 |q| \leq 1 q1

所以, q ∞ q^{\infty} q 无限趋近于 0

所以概率为:
1 1 − q \frac{1}{1-q} 1q1

即,
1 m n = n m \frac{1}{\frac{m}{n}} = \frac{n}{m} nm1=mn

而总和我们可以用等差数列求和公式:
n ( n + 1 ) 2 \frac{n(n+1)}{2} 2n(n+1)

据题目:
a i ≤ n − 1 a_i \leq n-1 ain1

所以,总和为:
n ( n − 1 ) 2 \frac{n(n-1)}{2} 2n(n1)

所以,答案为:
( n − 1 ) n 2 m \frac{(n-1)n}{2m} 2m(n1)n

最后附上code:

#include 
using namespace std;
int n,m;
int main(){
	scanf("%d %d",&n,&m);
	double ans=(double)(n-1)*(double)n/m*0.5;
	printf("%.6lf",ans);
	return 0;
}

话说,我都这么努力地写了,能点个赞吗?
我还只是个苦苦学习的孩子~~

你可能感兴趣的:(算法)