专栏文章

题解:AT_arc201_c [ARC201C] Prefix Covering

AT_arc201_c题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minor422
此快照首次捕获于
2025/12/02 05:53
3 个月前
此快照最后确认于
2025/12/02 05:53
3 个月前
查看原文
引用名言:在提高组,看到字符串的相关题目,几乎可以闭眼建字典树,然后通过分析性质与建模将问题转化为树上 dp 问题。
题目感觉翻译得有点抽象,判断子集 XX 合法的核心条件应该是:无论这个长为 1010010^{100} 的 AB 字符串 SS 形态如何都一定有一个 siXs_i \in X,满足 sis_iSS 的前缀。
对于本题,首先考虑如果固定 kk 怎么做。
思考题目中说的“任意长度为 1010010^{100} 的 AB 字符串”如果建成字典树就可以近似认为是一棵无限深度的完全二叉树,要满足“XX 中有至少一个串是它的前缀”其实意思是把 XX 中所有字符串放到树上后,所有根到叶子的路径上都有串结尾标记。
这其实可以抽象为:在一棵完全二叉树上,可以给其中 kk 结点任意黑白染色,求最终每条根到叶子的路径上都至少有一个黑色点的方案数。
这样就是一个经典的树形 dp 问题了。设 fif_i 表示以 ii 为根的子树的合法染色方案数,cic_i 表示以 ii 为根的子树中可以染色的点个数(就是字符串结尾标记的个数),结点 ii 的左右儿子分别为 li,ril_i,r_i,则转移如下:
  • ii 是某个字符串的结尾:fi=fli×fri+2ci1f_i=f_{l_i} \times f_{r_i} + 2^{c_i-1}(两个加数分别为结点 ii 不染黑/染黑的方案数);
  • 否则,fi=fli×frif_i=f_{l_i} \times f_{r_i}
考虑从 1n1 \sim n 枚举 kk,每次把新的 SkS_k 加入字典树中,每次只需要修改与 SkS_k 有关的结点的 ff 值即可,可以用数组记录并回溯(事实上有关结点是从新加入串的结尾结点到根结点这一条连续路径上的所有点)。
由于保证 Si5×105\sum |S_i| \le 5 \times 10^5,所以这样不超时。
感觉整体思路还是很顺畅的~

评论

0 条评论,欢迎与作者交流。

正在加载评论...