bsoj5988 [Achen模拟赛]期望 题解

bsoj5988

Description

【题目背景】
  NOI2018 已经过去了许久,2019 届的 BSOIer 们退役的退役,颓废的颓废,计数能力大不如前。曾经的数数之王 xxyj 坦言:“我现在算期望都靠枚举”,嘴边还挂着什么“分布列”,什么“样本数据”,然后又继续投身于文化课学习中了。
为了让 OI 的火炬传递下去,苣蒻 AChen 决定将 xxyj 退役前随口提到的期望问题交给你来解决。
【题目描述】
  现有 m + 1 个白色的小球排成一列并从一开始编号。每次操作从前 m 个小球中随机选择一个涂黑。现在执行了 n 次操作,则编号最小的白球编号的期望是多少?

Input

  从文件 mex.in 中读入数据。
  输入共一行两个整数 n,m。表示操作次数和白色小球的个数

Output

  输出到文件 mex.out 中。
  若最小的白球编号的期望为 E,则输出一行表示:((m^n)* E) mod (10^9 + 7)
  可以看出上式一定是个整数。

Sample Input

1 1

Sample Output

2

Hint

n <= 10^9, m <= 10^6

Source

Achen

%%%AChen队爷%%%

考察对容斥的基础理解,挺不错的一题

易列答案式

i=1m+1P(mex=i)i

对这种期望,常使用套路化法

i=0mP(mex>i)

和式里面相当于要求已钦定i个确定的球,求随机选n次将这i个球全部染黑的概率。

考虑容斥。先随便选,然后减去一个球未染的,然后加上两个球未染的,...

i=0mk=0i(1)kCik(mkm)n

是一个类似二项式反演但又不是的容斥

更换枚举

k=0m(1)k(mkm)ni=kmCik

又由组合数的性质

i=knCik=Cn+1k+1

(容易通过杨辉三角和组合数的递推式证明)

k=0m(1)k(mkm)nCm+1k+1

直接计算即可。

数据量如果更大的话,可以线筛出所有n次幂以省掉快速幂的log偷懒不写了(

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#include<cstdlib>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#include<set>
using namespace std;
typedef long long ll;
const ll MOD=1E9+7;
ll QPow(ll x,ll up){
x%=MOD;
ll ans=1;
while(up)
if(up%2==0) x=x*x%MOD,up=up/2;
else ans=ans*x%MOD,up--;
return ans;
}
ll Inv(ll x){
return QPow(x,MOD-2);
}
const ll MXN=1E6+5;
ll fac[MXN],facInv[MXN];
void FacInit(ll n){
fac[0]=1;for(ll i=1;i<=n;i++) fac[i]=fac[i-1]*i%MOD;
facInv[n]=Inv(fac[n]);for(ll i=n-1;i>=1;i--) facInv[i]=facInv[i+1]*(i+1)%MOD;
facInv[0]=1;
}
ll C(ll n,ll m){
if(n<m) return 0;
return fac[n]*facInv[m]%MOD*facInv[n-m]%MOD;
}
ll N,M;
int main(){
scanf("%lld%lld",&N,&M);
FacInit(M+1);
ll Ans=0;
for(ll k=0;k<=M;k++){
ll p=1;if(k%2==1) p=(-1+MOD)%MOD;
Ans+=p*QPow(M-k,N)%MOD*C(M+1,k+1)%MOD;
Ans%=MOD;
}
printf("%lld",Ans);
return 0;
}

2019/12/18

posted @   sun123zxy  阅读(283)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示