NC17889. 新建 Microsoft Office Word 文档
描述
输入描述
第一行一个正整数n表示操作次数,接下来n行,每行表示一个操作。若该行为"New",则表示新建,为:Delete id"则表示要删除编号为id的文档,其中id为一个正整数。操作按输入顺序依次进行。操作次数不超过100000,删除编号的数值不超过100000。
输出描述
对于输入的每一个操作,输出其反馈结果。对于新建操作,输出新建的文档的编号;对于删除操作,反馈删除是否成功:如果删除的文件存在,则删除成功,输出"Successful",否则输出"Failed"。
示例1
输入:
12 New New New Delete 2 New Delete 4 Delete 3 Delete 1 New New New Delete 4
输出:
1 2 3 Successful 2 Failed Successful Successful 1 3 4 Successful
Python3(3.9) 解法, 执行用时: 1161ms, 内存消耗: 15000K, 提交时间: 2020-11-12 17:34:01
from queue import PriorityQueue n = int(input()) S = set(range(1,n+1)) Q = PriorityQueue() for i in range(1,n+1): Q.put(i) for _ in range(n): inp = input() if inp[0]=='N': t = Q.get() print(t) S.remove(t) else: t = int(inp.split()[-1]) if t in S: print('Failed') else: print('Successful') S.add(t) Q.put(t)
C++11(clang++ 3.9) 解法, 执行用时: 196ms, 内存消耗: 2176K, 提交时间: 2020-07-06 09:56:36
#include<stdio.h> int main() { int n,a[100005]={0},x,k=1; char s[10]; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%s",s); if(s[0]=='N') { while(a[k]==1)k++; printf("%d\n",k); a[k]=1; k++; } else { scanf("%d",&x); if(a[x]==0)printf("Failed\n"); else { a[x]=0; if(k>x)k=x; printf("Successful\n"); } } } return 0; }