首页 > 试题广场 >

编程题3

[编程题]编程题3
  • 热度指数:2724 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 80M,其他语言160M
  • 算法知识视频讲解

产品经理(PM)有很多好的idea,而这些idea需要程序员实现。现在有N个PM,在某个时间会想出一个 idea,每个 idea 有提出时间、所需时间和优先等级。对于一个PM来说,最想实现的idea首先考虑优先等级高的,相同的情况下优先所需时间最小的,还相同的情况下选择最早想出的,没有 PM 会在同一时刻提出两个 idea。

同时有M个程序员,每个程序员空闲的时候就会查看每个PM尚未执行并且最想完成的一个idea,然后从中挑选出所需时间最小的一个idea独立实现,如果所需时间相同则选择PM序号最小的。直到完成了idea才会重复上述操作。如果有多个同时处于空闲状态的程序员,那么他们会依次进行查看idea的操作。

求每个idea实现的时间。

输入第一行三个数N、M、P,分别表示有N个PM,M个程序员,P个idea。随后有P行,每行有4个数字,分别是PM序号、提出时间、优先等级和所需时间。输出P行,分别表示每个idea实现的时间点。


输入描述:
输入第一行三个数N、M、P,分别表示有N个PM,M个程序员,P个idea。随后有P行,每行有4个数字,分别是PM序号、提出时间、优先等级和所需时间。全部数据范围 [1, 3000]。


输出描述:
输出P行,分别表示每个idea实现的时间点。
示例1

输入

2 2 5
1 1 1 2
1 2 1 1
1 3 2 2
2 1 1 2
2 3 5 5

输出

3
4
5
3
9
头像 SongTang
发表于 2019-09-19 08:09:19
链接:https://www.nowcoder.com/questionTerminal/f76b7bc64e554edaa53d8e0d84f921c5?f=discussion来源:牛客网 题目的表述非常绕.仔细阅读并尝试理解题意. 我们应该为每个PM保持1个priority_queue,保存当 展开全文
头像 卷笔刀坏了
发表于 2022-07-30 16:56:36
题目的核心点:因为输入是一口气把所有idea都输入进来了,所以在程序中需要为每个程序员维护一个当前时间,程序员在所有idea中挑idea的时候,只有当程序员的当前时间大于idea的提出时间才可能会处理这个idea。接着那如何从多个可能会处理的idea中挑出一个呢?根据题目意思是,先在PM层面根据规则 展开全文
头像 17c89
发表于 2023-12-15 19:31:02
import java.util.*; public class Main { private static int pmNum; public static void main(String[] args){ Scanner in = new Scann 展开全文
头像 重生之我要当分子
发表于 2025-01-01 20:51:09
解题思路 这是一个任务调度问题。需要根据 的 的优先级和程序员的工作状态来安排任务执行顺序。 关键点: 每个 的 需要按优先级、所需时间和提出时间排序 程序员选择任务时需要考虑所需时间最小和 序号最小 需要维护程序员的工作时间线 按照输入顺序输出结果 算法步骤: 维护程序员工作队列 展开全文