鞅与停时定理

好高妙!

大致思想是给每个局面构造一个势能函数 F(a1,a2,,an),使得 E(F(a1,a2,,an))E(F(a1,a2,,n))=1,其中 a 取遍 a 的后继状态。这样我们就能直接用终态的势能函数减去初始态的势能函数计算期望,即答案为 E(S)E(T)

可以考虑设 F(a1,a2,,an)=i=1nf(ai)。只要能构造出 f(x) 就能计算了。

1. 2024.2.26 模拟赛 T2 摸牌(cards)

g(x)=f(x)f(x1)。推式子可以发现即要求:

xm×g(x)×(n2)m+x(n1)m(mx)2(n1)m2×g(x+1)=1n

g(0)=0,即可得到 g 的递推式,再做一遍前缀和即可得到 f(x)

2. CF1025G Company Acquisitions

aii 接着的点,设 F(a1,a2,,an)=i=1nf(ai)。即要求对于任意 x,y,都有:

12(f(x+1)+yf(0))+12(f(y+1)+xf(0))=f(x)+f(y)1

f(0)=0,有:

12f(x+1)+12f(y+1)f(x)f(y)=1

考虑 f 能满足这个条件的一个必要条件:

12f(x+1)f(x)=12

f(x+1)=2f(x)1。递推计算即可。

3. CF1479E School Clubs

推式子过程略去。最后可以得到 f(x+1)=(3n2x)f(x)(2nx)f(x1)nx

但是没法线性预处理逆元,只能递推时维护分子和分母。设第 x 项的分子为 f(x),分母为 g(x)。有:

f(x+1)g(x+1)=(3n2x)f(x)g(x1)(2nx)f(x1)g(x)(nx)g(x)g(x1)

O(n) 计算即可通过。

4. CF1951G Clacking Balls

考虑用相邻两个球之间的距离来描述一个状态。

设距离序列为 a1,a2,,ak(忽略 0)。考虑鞅与停时定理,设一个状态的势能为 i=1kf(ai),一次操作能使得势能期望减少 1。那么:

1=1ni=1kf(ai)+f(aimodn+1)f(ai1)f(aimodn+1+1)

g(x)=f(x+1)f(x),有:

n=i=1kg(ai1)g(aimodn+1)

考虑每个数的贡献,有:

n=i=1kg(ai1)g(ai)

不难发现令 g(x1)g(x)=nmx 满足要求,因为 i=1kai 恒等于 m

若令 g(0)=0,那么 g(x)=nm(x+12),因为我们需要在操作后删除 a 中的 0 所以必须令 f(0)=0,那么有 f(x)=nm(x+13)

终止状态的势能为 f(m)。于是用初始状态势能减去终止状态势能就是答案。时间复杂度 O(nlogn)(瓶颈在对每个球的位置排序)。

posted @   zltzlt  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示