package a_od_test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Scanner;
/*
题目描述
某个打印机根据打印队列执行打印任务。打印任务分为九个优先级,分别用数字 1-9 表示,数字越大优先级越高。
打印机每次从队列头部取出第一个任务 A,
然后检查队列余下任务中有没有比 A 优先级更高的任务,
如果有比 A 优先级高的任务,则将任务 A 放到队列尾部,否则就执行任务 A 的打印。
请编写一个程序,根据输入的打印队列,输出实际的打印顺序。
输入描述
7
IN 1 1
IN 1 2
IN 1 3
IN 2 1
OUT 1
OUT 2
OUT 2
输入一行,为每个任务的优先级,优先级之间用逗号隔开,优先级取值范围是 1~9。
输出描述
3
4
null
输出一行,为每个任务的打印顺序,打印顺序从 0 开始,用逗号隔开
*/
public class Main06 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
sc.nextLine();
HashMap<String, List<int[]>> map = new HashMap<>();
int count = 0;
for (int i = 0; i < num; i++) {
String line = sc.nextLine();
String[] split = line.split(" ");
String printer = split[1];
//加入打印任务
if ("IN".equals(split[0])) {
int[] ints = new int[2];
ints[0] = Integer.parseInt(split[2]);
ints[1] = ++count;
List<int[]> inlist = new ArrayList<>();
if (map.containsKey(printer)) {
inlist = map.get(printer);
inlist.add(ints);
} else {
inlist.add(ints);
}
map.put(printer, inlist);
} else if ("OUT".equals(split[0])) { //输出
List<int[]> outlist = map.get(printer);
if (outlist == null || outlist.size()== 0) {
System.out.println("null");
} else {
outlist.sort((a, b) -> b[0] - a[0]);
System.out.println(outlist.get(0)[1]);
map.get(printer).remove(0);
}
}
}
}
}
华为OD机试:06打印文件
最新推荐文章于 2024-06-13 10:20:49 发布