优先队列,用API的话就很水,否则要实现个最小堆来弄,这里我偷懒了。。
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
PriorityQueue<Message> pq = new PriorityQueue<Message>(60000,
new Comparator<Message>()
{
public int compare(Message o1, Message o2)
{
if (o1.priority != o2.priority)
return o1.priority - o2.priority;
else
return o1.order - o2.order;
}
});
int order = 0;
while (sc.hasNext())
{
String line = sc.nextLine().trim();
if (line.startsWith("GET"))
{
if (pq.isEmpty())
System.out.println("EMPTY QUEUE!");
else
{
Message msg = pq.poll();
System.out.format("%s %d\n", msg.msg, msg.param);
}
}
else
{
String[] ss = line.split("\\s+");
Message ms = new Message();
ms.msg = ss[1];
ms.param = Integer.parseInt(ss[2]);
ms.priority = Integer.parseInt(ss[3]);
ms.order = order++;
pq.offer(ms);
}
}
}
}
class Message
{
String msg;
int param;
int priority;
int order;
}