2025牛客寒假算法基础集训营3

B 智乃的质数手串

先考虑链而不是环的情况。

因为前面的元素不可能用于消去后面的元素,所以删除的顺序不影响有解性。

对于链的情况,我们直接用栈维护未消去的元素,每次插入新元素前尽可能删去栈顶,若最后栈中只剩最后一个元素则有解。

环有解等价于任意一个循环移位有解,而循环移位不破坏前面元素的相对顺序,于是我们直接复制一遍,滑动窗口即可。


D 智乃的Notepad(Hard version)

容易发现每次询问的最优策略:考虑 \([l,r]\) 内的串构成的 Trie,我们从根开始 dfs,并且最后走通向深度最大节点的那条路,到达深度最大节点后不再回溯。

也就是求 Trie 边数的两倍减去最大深度。

最大深度就是 RMQ,容易处理,问题是如何求区间内的串构成 Trie 的点数。

如果我们把询问离线到 \(r\) 上,那么每次询问的便是在 \(l\) 之后的插入串覆盖点集的并。

想象我们第 \(k\) 次插入一个串相当于把路径上的点都染上颜色 \(k\),用一个数组维护当前各个颜色点数,问题就变成求区间和,树状数组做就好。


E 智乃的小球

经典的速度交换可以看作直接穿过,最多碰撞次数就是对每个 \(-1\) 前面的 \(1\) 求和,前缀和处理即可。

然后是求第 \(k\) 次碰撞时间,我们二分答案 \(mid\)

对每个 \(-1\),坐标小于 \(p-2 \cdot mid\) 的小球不会与之碰撞,我们二分出这个位置,利用前面的前缀和即可计算 \(mid\) 之内的碰撞次数。

郑州站的教训:实数域二分直接写成常数次更安全。


G 智乃与模数

这道比较板,求 \(n \mod i\)\(k\) 大之和,我们二分出这个第 \(k\) 大,然后对超过它的部分数论分块求和即可。

posted @ 2025-01-28 17:13  jzcrq  阅读(81)  评论(0)    收藏  举报