1 条题解
-
0
题意
我们有一个队列操作过程:
- 每次取队列前 人
- 淘汰最大值和最小值(按特定规则打破平局)
- 保留中间值并移到队尾
- 重复直到只剩 人,此人与公主组队
已知 个贵族的位置固定,其余 个可以自由排列。目标是最大化最终剩下贵族的舞蹈熟练度。
关键观察
1. 二分答案可行性
我们可以二分最终与公主组队的贵族熟练度 。
问题转化为:是否存在一种排列方式,使得某个熟练度 的贵族能够"幸存"到最后。
2. 强者标记策略
对于候选值 :
- 标记所有熟练度 的贵族为"强者"(用 表示)
- 标记所有熟练度 的贵族为"弱者"(用 表示)
目标:让至少一个 留到最后。
3. 匹配过程分析
每次处理前 人时,有 种情况:
111→ 淘汰两个 ,保留一个 到队尾110→ 淘汰一个 和一个 ,保留 或 (取决于谁是中间值)100→ 淘汰一个 和一个 ,保留000→ 淘汰两个 ,保留一个
关键:我们要尽量让 存活下来。
算法思路
-
构建初始队列:
- 固定位置的贵族必须放在指定位置
- 未固定位置的贵族可以自由安排
- 策略:尽量把强者()放在队列后部,弱者()放在前部
-
模拟匹配过程:
- 维护当前队列(用双端队列或数组)
- 每次取前 人,按规则淘汰和保留
- 跟踪队列中是否还有
-
返回结果:最终剩下的贵族是否为
贪心排列策略
在构建初始队列时:
- 固定位置的贵族:按给定位置放置
- 未固定位置的贵族:
- 将所有强者()和弱者()分别排序
- 尽量把弱者放在队列前部(先被淘汰)
- 把强者放在队列后部(更安全)
这样最大化强者生存概率。
复杂度分析
- 二分:,最多约 次
- 单次模拟:
- 总复杂度:,适合
样例验证
样例 1
输入: 7 3 5 2 5 5 8 6 6 2 8 9 二分过程: - 检查X=8: 可行(贵族6或8可以留到最后) - 检查X=9: 不可行(没有贵族≥9能留到最后) - 最终答案:8样例 2
输入: 3 1 5 3 5 5 所有贵族熟练度都是5,答案就是5样例 3
输入: 7 2 32 4 27 6 37 41 41 30 27 二分找到最大可行值37
总结
这道题的关键在于:
- 二分答案转化:将最大化问题转化为可行性问题
- 标记策略:用 表示强者/弱者,简化判断
- 贪心排列:弱者先淘汰,强者后淘汰
- 精确模拟:按照题目规则实现匹配过程
- 1
信息
- ID
- 3881
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者