题意:给你序列 a,进行 k 次操作,每次随机选择一个 x,使得 s+=n∏i=1ai∗(i!=x),ai−=1,求 k 次后 s 期望值。(n<=5000, k<=1e9)
Solution:
首先转化下题意,我们把序列 a 看做是一个 n 维的超立方体,每次的操作相当于随机选择一维,切下来一个厚度为1的面包片(比喻),s 加上的值就是面包片的体积,ai 减去 1 相当于这一维的厚度减少了 1 ,因为我们把面包片拿走了。那么就很好推出:s=n∏i=1ai−n∏i=1(ai−bi),bi 为第 i 个位置被选择的次数。
前一项是初始体积,我们求一下切 k 次后的期望体积 E=n∏i=1(ai−bi) 。隐约感觉出这题是生成函数,因此我们推式子时尽量往那里靠。
我们一共有 nk 种随机操作方式,发现每一种不同的 b 数列对应一种不同的贡献,设 f(b1,b2,...,bn) 表示 b 数列这样分布的次数,其中 ∑bi=k。
由排列组合的知识可知 f(b1,b2,...,bn)=k!b1!b2!...bn!。
每一种 b 数列的贡献是 n∏i=1(ai−bi),则: E=1nk∑Bf(b1,b2,...,bn)n∏i=1(ai−bi)。(∑B 是指把所有 b 数列情况加起来)
想求这个式子,就需要搬出我们的指数生成函数 (EGF)。
因为 ai−bi 是连乘的形式,我们可以放在指数生成函数中系数的位置上,表示选择每个 bi 值造成的贡献。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具