关注
洛谷题目页面传送门 & UVA12100 Printer Queue 题目页面传送门 题意简述 给你一个打印队列,每个任务都有一个优先级。现在有一个打印机,最多每分钟只能打印一个任务,如果你现在选择打印某个任务,它将在当前队列中排到底部。如果某个任务的优先级比当前队列中剩余的任务高,那么它就排在当前队列中的所有任务的后面。 已知队列顺序,和每个任务的优先级,问打印完一个指定位置的任务,所需要的分钟数。 题目思路 这道题目本质上是一道队列的模拟题目,如果想要在 $O(N^2)$ 的时间内 AC 掉的话,我们需要仔细揣摩题目的性质,思路如下: - 我们考虑不同的任务,它们在完成之后能够对结果所造成的贡献。那么显然正常打印完每一个任务,应该能够直接加上这个任务的优先级吧。 - 但是当某些任务的优先级比较高的时候,我们可以想到,我们应该把这个任务插入到前面的位置,让它短时间内完成,因为它的优先级比前面的任务都要高。 考虑最终的打印状态,假设 $f(i)$ 表示打印位置为 $i$ 的任务所需要的最少时间,那么一共有三种情况: - 这个任务的优先级大于队尾所有任务的优先级,那么我们直接在队尾加上这个任务就行了 - 这个任务的优先级小于队尾任务的优先级,那么我们直接在队尾保持不变,把这个任务插入到队列前面 - 这个任务打印完会使前面的任务都输出,那么我们将其放到一批任务中,所有这一批任务一起运行 显然我们想到可以使用双向链表模拟这个队列,来方便地实现剪切和插入的操作,这样题目就非常简单了,我们按照题意写个模拟即可。
点赞
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 面试问题记录 #
30192次浏览 497人参与
# 假如我穿越到了妈妈的18岁 #
1250次浏览 27人参与
# 京东TGT #
34621次浏览 157人参与
# 入职第五天,你被拉进了几个工作群 #
13971次浏览 77人参与
# 面试经验谈 #
19484次浏览 313人参与
# 工作一周年分享 #
14931次浏览 101人参与
# 机械人,你的第一份感谢信是谁给的 #
23065次浏览 295人参与
# 对妈妈没说出口的话 #
12553次浏览 325人参与
# 视觉/交互/设计招聘信息汇总 #
10517次浏览 596人参与
# 面试吐槽bot #
4672次浏览 50人参与
# 妈妈治愈了你哪些脆皮时刻 #
5292次浏览 107人参与
# 请用你的专业向妈妈表白 #
3716次浏览 44人参与
# 职场新人生存指南 #
337678次浏览 7238人参与
# 异地恋该为对方跳槽吗 #
26398次浏览 128人参与
# 硬件人更看重稳定还是高薪 #
41447次浏览 212人参与
# 上班苦还是上学苦呢? #
214604次浏览 1288人参与
# 机械求职避坑tips #
42140次浏览 356人参与
# 硬件人秋招的第一个offer #
66709次浏览 1082人参与
# 零跑求职进展汇总 #
1754次浏览 16人参与
# 不考虑转正,实习多久合适 #
25385次浏览 119人参与
# 租房找室友 #
29805次浏览 150人参与