A 追逐游戏 (chase)
答案具有单调性,直接求 \(k\) 级祖先和距离即可,倍增会被卡,上树剖轻松跑,时间复杂度 \(\mathcal{O}(n\log^2n)\),上长剖可以少个 \(\log\),题解是分讨到达点,感觉比较一般。
B 统计
直接给每个数随机赋值来哈希,检查是否是和的倍数即可,不过哈希范围要大一些,不然容易冲突,题解是给差分数组哈希,本质都一样,有的机子跑得慢要手写哈希表。
C 软件工程
首先会有一个贪心想法,要是能直接取前 \(K\) 大的区间单独作为集合即可,但是最后一个区间的选择会影响答案,所以不行。
但是这个贪心也很对,当存在一个集合的交为 \(0\) 时,无论怎样分都会有一个集合的价值是 \(0\),所以直接贪心取前 \(K-1\) 大,在加上剩下一个集合的价值即可。
如果不存在这样的集合呢,那我们可以直接按右端点排序,设 \(f_{i,j}\) 表示前 \(i\) 个分成了 \(j\) 段的最大值,首先他可以单开一个,在考虑加进来一个区间的损失,右端点是递增,没有损失,只需要考虑左端点,会损失 \(\max(0,l_i-l_k)\),相当于加入进 \(k\) 所在的集合,\(l_k\) 直接前缀 \(\max\) 维护出来即可,这样 \(l_k\) 也一定是那个集合最后交的左端点。
这个 DP 的要求就是任意区间有交,把两个做法拼起来就行。
D 命运的X
歌唱王国,太神了,根本不会啊,说下 80pts 的部分分吧。
首先有一道题 SDOI2017 硬币游戏,这个题是多模式串,部分分是 AC 自动机上随机游走,同时这个部分分是 JSOI有趣的游戏,就是建出 AC 自动机后,就可以知道转移点,从而直接高斯消元,这道题直接 KMP 也行,一样的道理,这样有了 60pts,然后特殊性质保证元素一样时,矩阵就是特殊形式,从下往上消就做完了。