VP Educational Codeforces Round 30

A

显然贪心去尝试变最后的 \(k\) 个。

B

把两种字符看做 +1 和 -1,区间合法等价于和为零即两端前缀和相等,用 map 维护一下每个值最前的位置即可。

C

对每一列找出最靠上的能够取得最大值的位置,最优方案是将其上方的 1 都删去。

D

有解条件是 \(k\in[1,2n-1],2\nmid k\),考虑递归构造,交换分治中心旁边两个位置即可继续分治下去,将剩余限制均分两半即可,注意必须分成奇数且少的要给左边。

E

相当于排序后分成四段,枚举前三段断点则第四段断点的合法位置是一个区间,为了最小预处理区间内最小值即可。

F

这个问题不弱于 SAM 模板,故考虑 SAM。

建出 SAM 后找到每个前缀对应的位置,若该位置未被禁止则打上标记。

在 fail 树上 dfs 一遍即可求出每个等价类对应的 \(f\),容易求出答案。

时间复杂度 \(O(n)\)

posted @ 2025-09-27 21:28  ax_by_c  阅读(8)  评论(0)    收藏  举报