Tenzing and Random Operations CF1842G 题解

[1] 分析

m 次选的位置分别为 b1m

于是答案为 E(i=1n(ai+j=1m[bji]v))=Snm

首先考虑期望很难做,希望将期望转化为概率形式,通过计算期望贡献之和来计算期望,发现因为这题贡献难以计算,这样还是有点困难。

再考虑因为所有方案等概率,将求期望转化为求所有情况下所期望答案的总和,最后除以总方案数即可,即求 S

S=bi=1n(ai+j=1m[bji]v),发现最终的 ai=ai+v+

因为答案最终是多个 n 个数相乘得到的数相加,于是答案可以 DP 求出。

具体而言,令 fi,j 代表前 i 个数确定,有 jbp 已经确定。(注意,对 v 的个数并没有限制)。

对当前这一位分类讨论:

若这一位取 ai,则 fi1,jaifi,j

若这一位取 v(已确定位置的 b 提供),则 fi1,jvjfi,j

若这一位取 v(新确定一个 b),则 fi1,j1v(m(j1))ifi,j

那么初始有 f0,0=1

最后统计答案 S=i=0min(n,m)fn,inmi

[2] 代码

int main() {
	rd(n); rd(m); rd(v);
	rep(i, 1, n) rd(a[i]);
	int cur = 1;
	int pre = 0;
	f[0][0] = 1;
	rep(i, 1, n) {
		rep(j, 0, min(i, m)) {
			f[cur][j] = 1LL * f[pre][j] * (a[i] + 1LL * v * j % mod) % mod;
			if(j > 0) fadd(f[cur][j], 1LL * f[pre][j - 1] * v % mod * (m - (j - 1)) % mod * i % mod);
		}
		swap(cur, pre);
	}
	rep(i, 0, min(n, m)) {
		fadd(S, f[pre][i] * fpow(n, m - i) % mod);
	}
	S = S * fpow(fpow(n, m), mod - 2) % mod;
	pt("%d\n", S);
	return 0;
}

[3] 经验

在遇到求期望的题目时,尝试将期望变为求概率方案贡献

posted @   SkyMaths  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示