QOJ 8171 - Cola

我们假设目前 B 知道排列 p 的前 x 位是多少,那么下一次,B 的最优策略是:

  • 对于 ix 的部分,令 qi=pi
  • 对于 i=x+1 的部分,令 qi 为任一 pi 可能取到但没有被猜过的值。
  • 对于 i>x+1,随机乱排剩余的 qi

考虑设 ci 表示第 i 次询问后 B 确定了 p 的前多少位。那么对于一组 {ci},存在一种猜数的过程对应这个 ci 的充要条件是,对于任意 0i<ncici+1,序列 ci 的出现次数不超过 n1i,因为当你确定了序列的前 i 位以后,i+1 位置上的值只有 ni 种可能性,再问 n1i 次以后只剩唯一值了,下一步必然猜对。

然后我们发现一件事,就是对于所有合法的 {ci},猜数过程恰好对应这组 {ci} 的概率是相同的,都是 1n!。对于一位 i,假设 ic 数列中出现了 j 次,那么概率是 nini+1·ni1ni··ni+1jnj+2j·1ni+1j=1ni+1,把它们乘起来刚好是 1n!

于是问题变为怎么求合法的 {ci} 的数量。

发现这个问题可以被转化为格路计数问题,即求有多少个 (0,0)(m1,n) 的路径,满足对于所有 0i<n,路径在第 i 列上的部分的长度不超过 ni1。考虑容斥,钦定一些列 i 满足路径在第 i 列上的部分的长度至少为 ni,假设这些 i 组成的集合为 S,令 s=xSnx,那么实际上可以看作网格图缩短了 s 行,方案数就是 (n+m1sn),再乘以容斥系数 (1)|S| 就是这个 S 对答案的贡献。

用多项式的语言来刻画这个过程:令 P(x)=i=1n(1xi),那么答案为 s=0m1(n+m1sn)·[xs]P(x)。因为本题 n 高达 107,所以无法分治 NTT,但注意到因为 mn,所以对于 sm1,有 [xs]i=1n(1xi)=[xs]i=1(1xi),而后者使用五边形定理可以 O(n) 求出。所以总复杂度就降至 O(n+m)

posted @   tzc_wk  阅读(86)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2022-02-10 2022.2.8 模拟赛题解
2022-02-10 Codeforces 309E - Sheep(二分+贪心)
2022-02-10 洛谷 P5548 - [BJ United Round #3] 押韵(单位根反演+幂级数)
2021-02-10 数论学习笔记
2021-02-10 洛谷 P7323 - [WC2021] 括号路径(启发式合并)
点击右上角即可分享
微信分享提示