CF555B Case of Fugitive 题解

一道思维题。

首先我们需要转化一下题意。

对于两个相邻的区间 [li,ri],[li+1,ri+1],我们将这两个区间合并一下,得到能够连接这两个区间的线段长度:[li+1ri,ri+1li]

这样,问题就变成了有若干个固定位置的点,用这些点去覆盖区间的问题。

将点按照其坐标进行排序,将这些区间按照左端点升序排序。

然后枚举每个点,对于所有左端点在这个点左边且没有使用过的区间,从中选出一条右端点最小但是大于这个点坐标的区间,用这个点覆盖这个区间。

上述过程可以使用优先队列来维护。

无解情况有哪些呢?

  1. 维护的时候出现了最小右端点比这个点坐标还要小。
  2. 能用的都用了,发现还有区间没有被覆盖。

这个贪心应该是一个比较常见的套路了,但是思维难度相对较高。

Code:GitHub CodeBase-of-Plozia CF555B Case of Fugitive.cpp

posted @   Plozia  阅读(23)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示