Problem - 1509 (hdu.edu.cn)https://acm.hdu.edu.cn/showproblem.php?pid=1509单纯的优先队列题,设置好优先队列的比较规则就行,还需要注意的是,在题目中隐含了一条内容,就是每一个Message都是包括ID(消息进入队列的序号),在两个Message优先级相同的时候,就是序号小的在队列前面。
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
new Main().solve();
}
private void solve() {
PriorityQueue<Message> queue = new PriorityQueue<>(new Comparator<Message>() {
@Override
public int compare(Message o1, Message o2) {
if (o1.priority != o2.priority)
return o1.priority - o2.priority;
return o1.id - o2.id;
}
});
Scanner in = new Scanner(System.in);
int id = 0;
while (in.hasNext()){
String op = in.next();
if ("GET".equals(op)){
if (!queue.isEmpty()){
Message msg = queue.poll();
System.out.println(msg.name+" "+msg.parameter);
}
else {
System.out.println("EMPTY QUEUE!");
}
}else {
String name = in.next();
int parameter = in.nextInt();
int priority = in.nextInt();
queue.add(new Message(id++,name,parameter,priority));
}
}
}
}
class Message {
int id;
String name;
int parameter;
int priority;
public Message(int id, String name, int parameter, int priority) {
this.id = id;
this.name = name;
this.parameter = parameter;
this.priority = priority;
}
}