noi2023补题

发布时间 2023-08-25 15:03:23作者: Feynn

D1T1

很憨的题目。前两个操作扫描线直接维护,后者直接暴力和前面每个操作求交。

就是这种格子题长宽变量应该设置为 nn,mm 之类的,数目才用 m,n,写的时候容易顺手写上去还调不出来。然后就是 unique 之前是要 sort 的。傻逼。

D1T2

考虑使用更加优雅的语言描述题目中的限制。一个集合内两个点的 lca 也在集合内部,这样的形式想到虚树,那么前者的限制等价于节点 \([1,n]\) 形成的虚树只包括 \([1,n]\) 的点,而后者的限制等价于节点 $[1,t] $ 形成的虚树不包括编号大于 \(t+k\) 的点。观察数据范围发现 \(k\le 10\),这样的数据范围想到状压。

容易设计状态 \(f_{x,s}\) 表示结点 \([1,x]\) 形成的虚树上编号在 \([x+1,x+k]\) 之中的节点的集合是 \(s\) 的方案数。考虑转移,也就是当前的这个点应该放在虚树上什么样的位置。发现只有三种情况:直接挂在原有虚树的一个点上、拆开虚树的一条边挤进去、先在虚树的某条边上挤进去另外一个节点再挂在这个节点上。转移系数是简单的:假设当前虚树有 \(n\) 个点,那么第一种决策系数是 \(n\),第二种是 \(n-1\),第三种也是 \(n-1\)。转移即可。

也就是说答案和树的形态无关,这何尝不是一种诈骗题呢。

D2T1

很憨的题目。显然考虑在 \(\text{lca}\) 处贡献,前半段显然只能一步一步向上跳,于是问题转变成了一个点向子孙的距离。发现只有两种决策,一种是向上到一个地方然后向下到该点的某个子孙再向下(显然是这样的),一种是直接向下。显然前者可以通过从上到下的递推来解决,后者可以直接暴力跑 dij。复杂度两只 \(\log\)

D2T2

考虑字典序大小的限制,发现等价于这个串不是回文串并且正串小于反串,前者用 manacher 统计,后者用后缀数组即可。具体说明一下。后者相当于给定了一个前缀开始的位置,而后缀的位置相当于是一个区间(当然还有一个奇偶性的限制啦),那么只需要二维数点即可。前者相当于希望统计一个位置开头的偶回文串的数量,那么可能问题等价于一定范围内的中心点数量,离线下来显然容易做。我甚至写的是哈希,比较抽象。