
日记
值得记录的也就两题。
Neo’s EscapeLink to
我们发现,一个克隆体一次会按掉一个区间内的所有按钮。那么就直接 dp。设 为把 这个区间内的所有按钮的都按完的最小克隆体数量。
转移十分的好写:,但是 一定要是一个克隆体能够全按完的。可以证明 能被一次性按完,当且仅当 形如:。
这么看,似乎连 暴力都不好写的,但是我们拥有 DS 之力,我们可以维护 满足 这段区间单调不降,再维护一个 满足 这段区间单调不增。感性理解: 一定是单调不降的,于是我们的 肯定最小越好。我们发现对于每个 , 的每个子区间肯定都是合法的,那么 转移的最优决策点肯定都不会在 右边。我们直接用线段树维护区间取 ,单点查询。
Censoring GLink to
既然出现在了 AC 自动机的题单里,我们肯定就要用 AC 自动机嘛。
对于文本串的匹配,我们用一个栈记录一路走来的 ,和 记录答案。如果匹配到的这个点,是一个模式串 的结尾,栈和 都 pop
次。然后 变成新的栈顶,继续匹配。
后日谈 Link to 后日谈
正式因为配不上她,所以我才在努力变强啊。
有奖竞猜:“她”代指谁?
5 月 4 日 Link to 5 月 4 日
时间不多了。
T1 Link to T1
明天再问问。
一定记得哦!
T2 Link to T2
AC 自动机 dp。
我们设 表示匹配前 个字符的方案数。我们在 AC 自动机上走到的 ,我们暴力跳 ,如果跳到哪个节点是一个模式串的结尾,那么就说明该转移了。设这个模式串的长度为 ,那么显然的转移是 加上 。
考虑如何优化。因为只有模式串的结尾的那几个节点对转移有用。我们对于每个节点记录一个 表示跳 能跳到的第一个节点使得它是某个模式串的结尾。每次直接跳 就行。时间复杂度 。
T3 Link to T3
原题。但是需要一些奇技淫巧。
分两种情况考虑。
如果有集合的交集是 ,那么肯定只有一个。因为如果有多个,那么肯定可以合并。那么我们把所有的线段按照长度从大到小排序,取前 的就行。
那有人要问了:如果剩下的有交集怎么办?没事,dp 会出手。
剩下的是没有交集为 的情况。
我们把所有的线段按照左端点排序。但是我们发现,排序完了依然不好做。究其原因是有线段包含了别的线段。我们考虑这些“包含了别的线段的线段”。如果它和它所包含的线段出现在了一个集合内,那么肯定不会影响到这个集合的答案。反之它肯定是单独成一个集合。因为如果它和别的线段一起,只可能使答案减少。
我们把“包含了别的线段的线段”的踢出去,那么剩下的肯定是左右端点都单调递增的线段。由于这样我们取一个集合只会取一个区间,于是我们 dp:设 为前 个集合用了 条线段。转移就是枚举 当作最后的一个集合,然后转移。前缀和优化。
但是我们发现这玩意是 的,无法通过。考虑 奇技淫巧。如果 ,也就是 跑不过,我们就不跑 dp,跑完上面的贪心就输出。能过就对了。
T4 Link to T4
没改。
文本生成器Link to
正难则反。
考虑如何求不可读的方案数。建出 AC 自动机,然后对于每个节点记录一个 表示它或者它在 树上的祖先是否有某个是一个模式串的结尾。然后 表示当前已经有了 个字符,在 节点上。枚举 在字典树上的每个儿子 ,如果 的 不为 ,那么就可以转移,否则不行。答案就是 。
Video Game GLink to
我连最基础的 dp 都做不出来了?完蛋了
设 表示已经匹配了 个字符,当前在 节点上。对于每个节点记录一个 表示这个节点是几个模式串的结尾。如果我想转移到 ,那么我们就得从 往上跳 ,记录从 路径上的所有点的 之和为 ,转移就是 对众多 取 。可以优化。
后日谈 Link to 后日谈
唯有自救。
日记
© 伊埃斯 | CC BY-NC-SA 4.0