-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtaskScheduling.java
67 lines (48 loc) · 2.05 KB
/
taskScheduling.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import java.util.Scanner;
/*今日头条
* 产品经理(PM)有很多好的idea,而这些idea需要程序员实现。现在有N个PM,在某个时间会想出一个 idea,每个 idea 有提出时间、所需时间和优先等级。对于一个PM来说,最想实现的idea首先考虑优先等级高的,相同的情况下优先所需时间最小的,还相同的情况下选择最早想出的,没有 PM 会在同一时刻提出两个 idea。
同时有M个程序员,每个程序员空闲的时候就会查看
1. 每个PM尚未执行并且最想完成的一个idea, (优先等级)
2. 然后从中挑选出所需时间最小的一个idea独立实现,(所需时间)
3. 如果所需时间相同则选择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
输出例子1:
3
4
5
3
9
* */
public class taskScheduling {
public static Scanner in = new Scanner(System.in);
static class IdeaTask{
int pmSeq;
int raiseTime;
int priority;
int timeCost;
int endTime;
public IdeaTask(int pmSeq, int raiseTime, int priority, int timeCost) {
this.pmSeq = pmSeq;
this.raiseTime = raiseTime;
this.priority = priority;
this.timeCost = timeCost;
}
}
static class PM{
}
public static void main(String[] args) {
}
}