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

文章讨论了在给定m个障碍的情况下,生成一个[0,n)随机整数序列并停止当与障碍之一相等的期望值问题。通过树模型和概率计算,得出期望值为(n-1)*n/2m。

Description

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

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

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

Input

第一行两个正整数 n,mn,mn,m
第二行 mmm 个整数 aia_iai 表示障碍,保证 aia_iai 两两不同。

Output

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

2 1
1

Sample Output

1.000000

Data Constraint

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

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

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

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

这道题我们可以将情况想象成一棵树,其中每一层有 nnn 个节点,其中 mmm 个节点不能继续往下走,如这样:
这里是 m = n - 1 时的情况
众所周知,期望是概率乘总和

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

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

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

a1a_1a1 为 1,∣q∣≤1|q| \leq 1q1

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

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

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

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

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

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

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

最后附上code:

#include <bits/stdc++.h>
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;
}

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值