5月杂题

P14363 [CSP-S 2025] 谐音替换

两种方法。
第一种,考虑刻画一次替换操作。若 \(s\)\(t\) 都没有公共前后缀显然是好做的,我们可以将 \(s_1\)\(s_2\) 合并为 \(s_1 s_2\)\(t_1\)\(t_2\) 合并为 \(t_1 t_2\),发现可以替换当且仅当 \(s_1 s_2 = t_1 t_2\),直接 AC 自动机跑多模式匹配即可。增加公共前后缀,直接做成 \(P s_1 s_2 S\)\(P t_1 t_2 S\) 即可。这启示我们字符串问题可以从消除公共前后缀考虑,也可以从字符串的实质变化考虑
第二种。方法差不多。考虑必须满足 \(s_1\)\(t_1\) 的后缀且 \(s_2\)\(t_2\) 的前缀。则可以建两棵 Trie 然后做二维数点。
方法二更容易想到。

P4735 最大异或和

容易转化问题的后缀异或为前缀异或和(这样显然更好做一点,因为后面是不断添加的)。维护一棵 trie,问题转化为下标区间 \([L,R]\) 中的所有数异或 \(x\) 的最大值。联想到可持久化字典树,然后直接做即可。

P5283 [十二省联考 2019] 异或粽子

很套路。维护每一个 \(r\) 对应的最大的异或值,相对的 \(l\) 的区间记作 \([L,R]\)。把刚开始的 \(n\) 个丢进一个堆,每次取出最大的,再将它 split 变成两个区间即可。

CF1677D Tokitsukaze and Permutations

*2500,但是我是个区做不出来。对 \(v\) 考虑,发现每次相当于整体向左移一位,并且 \(v_i\) 变成 \(\min(v_i-1,0)\)。分类讨论就做完了。

CF1175F

考虑如下的性质:

  • \(1\) 在子排列中出现且仅出现 \(1\) 次。

这意味着,我们可以将 \(1\) 作为划分的断点。然后观察到:

  • 子排列的长度仅与最大值有关。

于是可以枚举某个数作为最大值,然后判断确定的子序列是否合法即可。判断只需用 xor-hashing 即可。

posted @ 2026-05-08 22:07  LoserBpds  阅读(12)  评论(0)    收藏  举报