Loading

复健题单

CF2056E

注意到题目的要求本质上就是将区间包含关系建树,可以用单调栈做。

注意到长度为 \(n\) 的区间最长方案数类似卡特兰树,具体的,\(f_n = cat_{n - 1}\)

然后在这棵树上搜,注意到儿子之间的缝隙的贡献可以拼在一起算,也就是说其总贡献就是 \(f_{len_u - \sum len_v}\)

然后递归乘一起就好了。

CF2043E

拆位。

注意到题目要求就是每次将一行全变为 \(0\),一列全变为 \(1\)

发现会有重叠操作,很不好搞。

这个时候有种方法是建图找环,当然还有另外一种方法。

我们倒着看,那么就变成将目标矩阵一行全 \(0\) 给删掉或者一列全 \(1\) 给删掉(因为覆盖过的可以是任意值),然后最后留下来的就是绝对不可能被覆盖的位置,一一比对即可。

目前这个过程还没有什么很好的做法实现,我写得是一个暴力。

CF2032E

有点东西的题。

注意到 \(n\) 是奇数,思考有没有什么很好的性质。

貌似想不到了,先差分,发现形如 ++--,然后发现 +- 捆绑在一起,思考如何将限制拆开。

再施展一次操作,变成 ++00--,一直这么下去,注意到是环形且是奇数,最后一次必然与 ++ 错位,最后形如 -0+

进行奇偶分组,很容易分别变成相同的数。

考虑将这个操作再进行很多次,例如 -000+,一直这么下去,最后一次仍然与 - 错位,那么操作就等价于在任意位置上 -,同时在任意位置上 +,直接做就完了。

主播主播这种写法费脑子还费手,有没有更简单好想的做法呢! 有的兄弟有的。

这种没有后效性的操作类题目最坏时间复杂度 \(O(n^3)\),具体来说是设每个位置操作 \(b_i\) 次,然后直接高斯消元。

由于题目特殊限制,我们算出最终 \(i\) 的值为 \(a_i + 2b_i + b_{i - 1} + b_{i + 1}\)\(i + 1\) 位置上的值为 \(a_{i + 1} + 2b_{i + 1} + b_i + b_{i + 2}\),显然两值相等,列等式移项得 \(( b_{i - 1} + b_i ) - (b_{i + 1} + b_{i + 2} ) = a_{i + 1} - a_{i}\)

我们令 \(c_i = b_{i} + b_{i + 1}\),则有 \(c_{i + 1} = c_{i - 1} - a_{i + 1} + a_i\),由于 \(n\) 是奇数,很容易可以解出所有 \(c\),然后最后再消元一下即可得出 \(b\),需要注意无解和操作次数必须为整数。

posted @ 2025-06-26 09:25  Alexande  阅读(10)  评论(0)    收藏  举报