把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

QOJ # 4424. Babushka and her pierogi

题面传送门

好题!

首先我们考虑操作次数应该是多少,如果将每个点现在在的位置向将要到的位置连一条边,那么一个下界是 n 减去环的个数。

同时我们考虑如果不算 C 这个常数,最小的代价应该是多少。一个下界是 12i=1n|aibi|,这个下界不难理解,每次移动一个 pierogi 至多只会让两个位置的 aibi 靠近一步,因此总的贡献至少是这个。

现在是有点脑洞的一步,我们可以说明这两个下界是可以同时取到的!

因为每个环独立,所以对于每个环分别考虑。环上每个位置有一个 aibi,表示现在在这个位置上的数 ai 和目标的 bi,我们将其看成一条从 ai 指向 bi 的线段,所有这样的线段绕成了一个环。考虑 bi 最小的一个位置,考虑这个 bi 指出的 aj 所指向的 bj,若 bj>ai,则直接对 i,j 操作,两个点都向目标靠近。否则归纳考虑 bj 的指向,容易发现一定存在一个可以操作,得到两个更小的环,那么就一定可以在环长 1 次以内消完,并且每次消除都让两个点均向目标靠近,所以这两个下界都是可以取到的。

现在根据这个证明过程我们有一个 O(n2) 的暴力,考虑优化。每次找到最小点的时候,我们维护两个指针,一个从这个点往前跑,一个从这个点往后跑,遇到能消的就消,直到 b 最小的那个点的 a 正确为止。这样的复杂度就是 O(nlogn) 的,因为每次分裂的复杂度是较小的环长度,所以复杂度证明可以参考启发式分裂的复杂度,是 O(nlogn)

submission

posted @   275307894a  阅读(87)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
历史上的今天:
2022-10-26 CF1753E N Machines
浏览器标题切换
浏览器标题切换end
点击右上角即可分享
微信分享提示