题意
传送门 NC 17889
题解
通过维护已使用的序号,求未使用的最小正整数,复杂度较高。运用补集的思想,用 s e t set set 维护未使用的序号, s e t . b e g i n ( ) set.begin() set.begin() 即与已有文件编号不重复的最小正整数;对于删除操作,重新插入元素即可。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
set<int> st;
vector<bool> used(n);
for (int i = 1; i <= n; i++) st.insert(i);
while (n--)
{
char op[10];
int k;
scanf(" %s", op);
if (op[0] == 'N')
{
k = *st.begin();
printf("%d\n", k);
st.erase(k);
used[k] = 1;
}
else
{
scanf("%d", &k);
if (used[k])
{
puts("Successful");
st.insert(k);
used[k] = 0;
}
else
{
puts("Failed");
}
}
}
return 0;
}