連結:https://www.nowcoder.com/acm/contest/190/I
來源:牛客網
時間限制:C/C++ 1秒,其他語言2秒
空間限制:C/C++ 32768K,其他語言65536K
64bit IO Format: %lld
題目描述
CSL正在學習《計算機辦公自動化》檔案的建立與删除。
CSL發現,當他建立一個word文檔時,會得到一個名為"建立 Microsoft Office Word 文檔.doc"的檔案,再建立一個,則名為"建立 Microsoft Office Word 文檔(2).doc",再建立,便是"建立 Microsoft Office Word 文檔(3).doc"。不斷建立,編号不斷遞增。倘若他已經建立了三個文檔,然後删除了"建立 Microsoft Office Word 文檔(2).doc",再建立一個就又會得到一個"建立 Microsoft Office Word 文檔(2).doc"。
嚴格來說,Windows在每次建立文檔時,都會選取一個與已有檔案編号不重複的最小正整數作為新文檔的編号。
現在,請你程式設計模拟以上過程,支援以下兩種操作:
New:建立一個word文檔,回報建立的文檔的編号;
Delete id:删除一個編号為id的word文檔,回報删除是否成功。
初始時一個檔案都沒有,"建立 Microsoft Office Word 文檔.doc"的編号算作1。
輸入描述
第一行一個正整數n表示操作次數,接下來n行,每行表示一個操作。若該行為"New",則表示建立,為:Delete id"則表示要删除編号為id的文檔,其中id為一個正整數。操作按輸入順序依次進行。操作次數不超過100000,删除編号的數值不超過100000。
輸出描述
對于輸入的每一個操作,輸出其回報結果。對于建立操作,輸出建立的文檔的編号;對于删除操作,回報删除是否成功:如果删除的檔案存在,則删除成功,輸出"Successful",否則輸出"Failed"。
樣例輸入
12
New
Delete 2
Delete 4
Delete 3
Delete 1
樣例輸出
1
2
3
Successful
Failed
4
解題思路
直接判斷就行了。
#include <stdio.h>
int main()
{
char s[10];
int h[100010];
int a = 1, ans = 0, i, j, t;
scanf("%d", &t);
while (t--)
{
scanf("%s", s);
if (s[0] == 'N')
{
if (!ans)
printf("%d\n", a++);
else
{
for (i = 1; i <= a; i++)
if (h[i])
break;
ans--;
h[i] = 0;
printf("%d\n", i);
}
}
else if (s[0] == 'D')
{
scanf("%d", &j);
if (j < a)
{
if (h[j])
puts("Failed");
else
{
ans++;
h[j] = 1;
puts("Successful");
}
}
else puts("Failed");
}
}
return 0;
}