> 文章列表 > 华为OD机试-打印机队列-2022Q4 A卷-Py/Java/JS

华为OD机试-打印机队列-2022Q4 A卷-Py/Java/JS

华为OD机试-打印机队列-2022Q4 A卷-Py/Java/JS

有5台打印机打印文件,每台打印机有自己的待打印队列。因为打印的文件内容有轻重缓急之分,

所以队列中的文件有1~10不同的代先级,其中数字越大优先级越高。

打印机会从自己的待打印队列中选择优先级最高的文件来打印。

如果存在两个优先级一样的文件,则选择最早进入队列的那个文件。

现在请你来模拟这5台打印机的打印过程。

输入描述

每个输入包含1个测试用例,每个测试用例第一行给出发生事件的数量N(0 < N < 1000)。
接下来有 N 行,分别表示发生的事件。
共有如下两种事件:
1. “IN P NUM”,表示有一个拥有优先级 NUM 的文件放到了打印机 P 的待打印队列中。(0< P <= 5, 0 < NUM <= 10);
2. “OUT P”,表示打印机 P 进行了一次文件打印,同时该文件从待打印队列中取出。(0 < P <= 5)。

输出描述

对于每个测试用例,每次”OUT P”事件,请在一行中输出文件的编号。
如果此时没有文件可以打印,请输出”NULL“。
文件的编号定义为”IN P NUM”事件发生第 x 次,此处待打印文件的编号为x。编号从1开始。

示例1   输入输出示例仅供调试,后台判断数据一般不包含示例

输入

7
IN 1 1
IN 1 2
IN 1 3
IN 2 1
OUT 1
OUT 2
OUT 2

输出

3
4
NULL

Java 代码

import java.util.Scanner;
import java.util.*;
import java.util.stream.Collectors;public class Main { public static class File {private int order;private int priority;public File(int order, int priority) {this.order = order;this.priority = priority;}public int getorder() {return order;}public void setorder(int order) {this.order = order;}public int getpriority() {return priority;}public void setpriority(int priority) {this.priority = priority;}}public static void main(String[] args) { //处理输入Scanner in=new Scanner(System.in); int count = in.nextInt();List<List<File>> printers = new ArrayList<>();for (int i = 0; i < 5; i++) {printers.add(new ArrayList<>());}int flag = 0;for (int i = 0; i <= count; i++) {String[] operations = in.nextLine().split(" ");String type = operations[0];if ("IN".equals(type)) {int p = Integer.parseInt(operations[1]);int num = Integer.parseInt(operations[2]);flag++;File file = new File(flag, num);List<File> files = printers.get(p - 1);files.add(file);} else if ("OUT".equals(type)) {int p = Integer.parseInt(operations[1]);List<File> files = printers.get(p - 1);if (files != null && files.size() > 0) {files.sort((a, b) -> {return b.getpriority() - a.getpriority();});File file = files.get(0);System.out.println(file.getorder());files.remove(0);} else {System.out.println("NULL");}}}}
}

Python代码

printers = [[] for _ in range(5)]
fid = 0
N = int(input())
orders = []
for i in range(N):orders.append(input().split(" "))import heapq
for i, order in enumerate(orders):opt = order[0]if opt == 'IN':_, p, rank = orderfid += 1heapq.heappush(printers[int(p)-1], (-int(rank), fid))elif opt == 'OUT':p = int(order[1])if printers[p-1]:_, id = heapq.heappop(printers[p-1])print(id)else:print("NULL")

JS代码

function main(input_strs) {opreations = input_strs.map((str) => str.split(" "))var print_machines = {}let taskId = 1opreations.forEach((task) => {var [type, printId, priority] = taskif (type === "IN") {var arr = [taskId, priority]if (!print_machines[printId]) {print_machines[printId] = []}print_machines[printId].push(arr)print_machines[printId].sort((a, b) => b[1] - a[1])taskId++} else {var arr = print_machines[printId].shift()console.log(arr ? arr[0] : "NULL")}})
}main(["IN 1 1",
"IN 1 2",
"IN 1 3",
"IN 2 1",
"OUT 1",
"OUT 2",
"OUT 2"])