P5400 [CTS2019] 随机立方体

这题一定程度上锻炼了我的推式子能力

比较中清新的一道计数题。

题意

给定一个 n×m×k 的三维立方体,你需要将 1nmk 这些数都填到立方体的 nmk 个点里,使得每个数恰好出现一次。定义极大点为一个点使得 对于所有存在至少一维坐标和该点相同的点,这些点上面写的数字都比该极大点小。若填数方案在 (nmk)! 种方案中随机,求恰好存在 t 个极大点的概率。mod998244353

多组数据,T10,n,m,k5×106

分析

先把概率乘以总方案数转计数,虽然总方案数过大无法计算,但我们要相信它迟早会被消掉

不难发现所有极大点的三个坐标两两不同,且至多有 min(n,m,k) 个极大点。

恰好数量计数向来不好做,转化成钦定至少有 i 个极大点,其余随意的方案数,然后用二项式反演把答案演回去。具体地,设答案为 ans,钦定至少 i 个极大点的方案数为 fi,则 ans=i=tmin(n,m,k)(it)(1)itfi

考虑如何求 fi。令一个极大点支配另一个点当且仅当该点存在至少一维使得该点的这些维坐标和极大点相同。先考虑把极大点们的坐标方案数算出来,然后将不在极大点支配下的普通点提前算好标号方案数。不在极大点支配下的普通点数量用总体减不合法可以算得是 nmk(ni)(mi)(ki)。若令 qi=(ni)(mi)(ki),则不受支配的普通点数量为 q0qi,标号方案数就是 Aq0qi。而极大点坐标方案数为 AniAmiAkiA 为排列数,然而这个式子会把一种方案算 i! 遍,但由于后续会按照大小关系的顺序考虑限制,所以此处也相当于算了大小关系。整理得出 fi=AniAmiAkiAq0qigi,其中 gi 表示将剩余的点合法标号的方案数。

考虑如何求 g。令我们当前要求的是 gp,我们需要求出剩余的点中只被点值第 i 小的极大点支配而不被那些点值更小的极大点支配的点的数量,答案就是能被前 i 小的极大点支配的点数 nmk(ni)(mi)(ki)=q0qi 减去能被前 i1 小的极大点支配的点数 q0qi1,为 qi1qi。考虑按照极大点的点值从大往小插入,设只被第 i 大(即 第 pi+1 小)支配的点数为 si=qpiqpi+1,填完前 i1 大还剩下 q0qpi+1 个空位置,而最大的位置肯定要给极大点,然后方案数就是在 q0qpi+11 个位置中选出 qpiqpi+11 个位置并钦定顺序,即为 Aq0qpi+11qpiqpi+11

考虑化简 g。不妨将 gp 展开:

gp=i=1pAq0qpi+11qpiqpi+11=i=1pAq0qi1qi1qi1=i=1p(q0qi1)!(q0qi1)!

注意到前一项的分子和后一项的分母可以约掉,然后把第一项分母和后一项分子提出来:

gp=(q0qp1)!i=1p11q0qi

g 代回 f

fi=AniAmiAkiAq0qigi=AniAmiAkiq0!(q0qi)!(q0qi1)!j=1i11q0qj

fi=AniAmiAkiq0!j=1i1q0qj

这只是方案数,但注意到最终要求的概率等于方案数除以 (nmk)!=q0!,刚好和 fi 中的 q0! 抵消,所以我们可以视 fi=AniAmiAkij=1i1q0qj 即可。而 f1,,n 这个东西是很好在 O(n) 的时间复杂度内预处理出来的(注意要使用 O(1) 逆元才是严格线性),计算 ans 本身也只有 O(n) 的复杂度,故总时间复杂度 O(n)

最后挂个式子:

ans=i=tmin(n,m,k)(it)(1)itAniAmiAkij=1i1q0qj

作者:dcytrl

出处:https://www.cnblogs.com/dcytrl/p/18603532

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

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