会员专享
请先
登录,登录后可使用今日免费解锁;
开通会员后可解锁完整内容。
解题思路
本题的算法标签是「模拟 + 下标分桶计数」。先把问题拆开:
总耗时 = 检查次数 + 运输耗时总和。
每件货物最终都恰好被运输一次,所以运输耗时总和就是 ∑priorities,是个定值;问题只剩下「一共要做多少次检查」。
做法一:直接模拟。 用双端队列按题面规则一步步走:每步检查队首,若它是当前最高优先级就弹出并累加优先级,否则移到队尾;再用一个计数数组维护当前最高优先级。由于优先级只有 100 种,每件货物在「比它高的优先级被清空」之前每轮最多被搬一次,所以每件货物最多被检查 100+1 次,总检查次数 O(100n),n=105 时约 5×106 次搬移,C++ 很轻松、Python 就偏紧。下面的写法把「搬移」这一步变成「计数」,常数更小,五种语言都能稳过。