这道题主要是需要记录下删除的序号,必须要由小到大储存。
我们可以使用优先队列(PriorityQueue)来存储删除的序号。
然后用p作为一个指针,来确定下一个文件创建的标号排到了多少。
如果是输入的话我们分两种情况:
第一种为优先队列中没有元素。这样我们可以直接输出标号p同时p++
第二种为优先队列中有元素,我们直接poll取出元素并删除、
如果是输出的话我们分两种情况:
第一种为x>=p。这样一定是超出范围的,无法创建文件,提示错误。
第二种为x<p,我们需要注意一点,就是如果此时优先队列中有x,那我们也要输出Failed。如果没有的话我们再把它存到我们的queue中即可。
import java.math.*; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.io.StreamTokenizer; import java.util.*; public class Main { public static void main(String args[])throws IOException { StreamTokenizer in = new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in))); PrintWriter out = new PrintWriter(new OutputStreamWriter(System.out)); PriorityQueue<Integer> queue = new PriorityQueue<>(); in.nextToken(); int T = (int)in.nval; int p=1; for(int t=0;t<T;t++) { in.nextToken(); String s = in.sval; if(s.equals("New")==true) { if(queue.size()!=0) { out.println(queue.poll()); } else { out.println(p++); } } if(s.equals("Delete")==true) { in.nextToken(); int x = (int)in.nval; if(x>=p) { out.println("Failed"); } else{ if(queue.contains(x)==true) { out.println("Failed"); } else { if(x==p-1) { p--; } else { queue.add(x); } out.println("Successful"); } } } } out.flush(); } }