这道题主要是需要记录下删除的序号,必须要由小到大储存。
我们可以使用优先队列(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();
}
}
京公网安备 11010502036488号