QOJ # 4424. Babushka and her pierogi
好题!
首先我们考虑操作次数应该是多少,如果将每个点现在在的位置向将要到的位置连一条边,那么一个下界是 减去环的个数。
同时我们考虑如果不算 这个常数,最小的代价应该是多少。一个下界是 ,这个下界不难理解,每次移动一个 pierogi 至多只会让两个位置的 向 靠近一步,因此总的贡献至少是这个。
现在是有点脑洞的一步,我们可以说明这两个下界是可以同时取到的!
因为每个环独立,所以对于每个环分别考虑。环上每个位置有一个 与 ,表示现在在这个位置上的数 和目标的 ,我们将其看成一条从 指向 的线段,所有这样的线段绕成了一个环。考虑 最小的一个位置,考虑这个 指出的 所指向的 ,若 ,则直接对 操作,两个点都向目标靠近。否则归纳考虑 的指向,容易发现一定存在一个可以操作,得到两个更小的环,那么就一定可以在环长 次以内消完,并且每次消除都让两个点均向目标靠近,所以这两个下界都是可以取到的。
现在根据这个证明过程我们有一个 的暴力,考虑优化。每次找到最小点的时候,我们维护两个指针,一个从这个点往前跑,一个从这个点往后跑,遇到能消的就消,直到 最小的那个点的 正确为止。这样的复杂度就是 的,因为每次分裂的复杂度是较小的环长度,所以复杂度证明可以参考启发式分裂的复杂度,是 。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
2022-10-26 CF1753E N Machines