CSP-S 2025 游记
两点左右进场。今年 HB 也是用上 NOI Linux 了,感觉很牛。
开场先把四个题都看了一遍。T1 似乎不难,先直接贪一遍再反悔一下应该就差不多了。T2 好像也还好,先保留一下最小生成树,再 \(O(2^k)\) 枚举一下应该也差不多。不过看上去范围卡的很紧,可能要上点手法来卡常。感觉 T3 是那种想一万个做法发现本质上都是暴力的东西。不过 T4 看起来是个比较正常的计数,大概还是能做的。
大概 20min 打完了 T1。T2 一开始写了 \(O(m\log m+2^kkn\log n)\),但好像不是很能过。于是花了点时间把后面那只 $\log $ 换成了基排。算了一下好像还是有点极限,但是一时也不太会去掉 \(k\),就先不管了。考后发现好像写成 dfs 的形式复杂度直接就不带 \(k\),然而考场上把 dfs 的复杂度给算错了,奇异搞笑。
然后开始想 T3。想 T3 的过程确实比较折磨,搞出了一车假做法。想了一会发现一对 \(s\) 最多对一对 \(t\) 贡献一次,因为找到第一个不同的字符,它们应该从这个位置开始有一段相同的前缀和后缀。想到这个东西之后感觉可能有一些基于 \(\sum L\) 的均摊,但找了很久也没有找到什么复杂度比较对的东西。
后来发现一对 \(s/t\) 可以拆成三段,分别是公共前缀,公共后缀和中间的一段。然后 \(s\) 能给 \(t\) 贡献的条件就是中间一段相等,\(s\) 的其他两段分别是 \(t\) 这两段的后缀/前缀。建出正反字典树就有一个二维偏序,可以做到 \(O(\sum L+(n+q)\log n)\)。这个时候差不多 16:00。感觉这个东西太难写了,于是准备先想一下 T4。
做 T4 时看到那个 \(\sum s_i\le 18\) 的性质,以为这道题是容斥推式子,但是想了一下好像不太行。那感觉就是正常 dp 然后处理一下贡献。状态记一下 \(f_{i,j,k}\) 表示填了 \(i\) 个数,失败了 \(j\) 次,\(c>j\) 的人用了 \(k\) 个,然后对 \(c>j\) 的部分延迟贡献一下就差不多了。推了一下贡献感觉很对啊!
然后开始写。本来以为抄一下转移式子就写完了,没想到有一些边界情况不能转移,被卡了好久。大概写到 17:10 左右才写完。
然后开始写 T3,写+调了 70min 左右还是无法战胜,只拿了 \(O(nq)\) 的分遗憾离场了。最后好像也没咋检查,希望不会挂分。
出考场 20min 意识到我 T3 贡献按照 dfs 序加入又按 dfs 序撤销,然后留了一堆贡献撤销不掉。那无敌了。
估分 100+[80,100]+50+100=[330,350]。希望能去 WC 吧。

浙公网安备 33010602011771号