Summary
啊……说老实话,早上昏昏欲睡的,起码浪费了一个多小时。比赛打麻了 qwq。
A 题类似费用提前计算,回忆起这个 trick 之后就简单了。B 题又错付了,平衡树常数令人 😅,没注意到区间平移可以在数据结构之外进行。C 题打表,佛了。
Solution
A− RK
有 n 盏灯排成一排,在某时刻开始时操作灯 i,会立即改变灯 i 的状态,在下一时刻末改变灯 i+1 的状态,下下一时刻末改变灯 i+1 的状态……直到改变了灯 n 的状态或者某一时刻所有灯关闭。给定初始状态,求至少需要到第几时刻,能让所有灯关闭。
多测,T≤216,n≤16。
钦定时刻 r 时关完灯,fr(i,S) 表示时刻 i 时能否达到状态 S,每次操作灯时对灯序列的最终影响是确定的,所以 O(n32n) 打表就好。
B− WK
给定序列 {an},对于每个其子段 {bm},每次操作选定 i∈[1,m),令 bi←bi±1,bi+1←bi+1∓1,目标是使所有 K∣bi。求所有子段最小操作次数(无解算作 −1 次)之和。
n≤106。
对于 {bm},显然有解当且仅当 K∣∑bi,此时最优操作次数为 ∑m−1i=1f(∑ij=1bimodK),其中 f(x)=min{x,K−x}。
计数?暴力一点,枚举右端点 r,维护每个左端点 l 的内部 f 贡献以及到这个 r 时模 K 的余数。记贡献为 v,余数为 r,那么转移涉及的修改是对 [vr1]T 的线性变换,直接平衡树维护矩阵,复杂度 O(nlogn) 理论正确。可以用线段树,也可以压缩矩阵数据量,总之我懒得写啦。
C− SK
一个 boss,n 滴血,每回合你随机获得以下三种手牌:

之一,求期望需要多少回合消灭 boss。答案模 998244353。
显然是屯牌到最后一回合直接秒 boss,那么期望步数 = 期望恰好秒不掉 boss 的步数 +1 = 所有秒不掉 boss 的手牌被抽出来的概率和 +1。讨论牌型:
1:n∑i=13−i=1−3−n2.
2:(n−1)/2∑i=13−i=1−3−(n−1)/22.
3:∑i≥13−i=12.
2+3:n/2∑i=12i−23i=2−2(2/3)n/2−1+3−n/2.
这几种比较好算,剩下的容斥,即“假设这些类型都出现过”,再继续打,依此计算手牌伤害,那么
1+2:A(x)=13(x+x3)A(x)⇒(1−13x−13x3)A(x)=0.
1+3:B(x)=13(x+x2)B(x)⇒(1−13x−13x2)B(x)=0.
1+2+3:C(x)=13(x+x3+x4)C(x)⇒(1−13x−13x3−13x4)C(x)=0.
都能矩阵加速求点值,注意容斥的时候还是要把伤害算成假设条件下的伤害。例如 1+2+3 下对 2+3 的容斥应为 D(x)=13(x3+x4)D(x)。合并同类项之后只需要四次矩阵快速幂。
复杂度 O(Tlogn),常数为矩阵乘法的 53。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2021-03-11 Solution -「CF 1491H」Yuezheng Ling and Dynamic Tree