1. 程式人生 > >演算法提高 新建Microsoft Word文件

演算法提高 新建Microsoft Word文件

演算法提高 新建Microsoft Word文件  

時間限制:1.0s   記憶體限制:256.0MB

    

問題描述

  L正在出題,新建了一個word文件,想不好取什麼名字,身旁一人驚問:“你出的題目叫《新建Microsoft Word文件》嗎?”,L大喜,一拍桌子,說:“好,就叫這個名字了。”
  仔細觀察,當你新建一個word文件時,會得到一個名為“新建 Microsoft Word 文件.doc”的檔案,再新建一個,則名為“新建 Microsoft Word 文件(2).doc”,再新建,便是“新建 Microsoft Word 文件(3).doc”。不斷新建,編號不斷遞增。倘若你現在新建了三個文件,然後刪除了“新建 Microsoft Word 文件(2).doc”,再新建就又會得到一個“新建 Microsoft Word 文件(2).doc”。

  嚴格說,Windows在每次新建文件時,都會選取一個與已有檔案編號不重複的最小正整數作為新文件的編號。

  請程式設計模擬以上過程,支援以下兩種操作
  New:新建一個word文件,反饋新建的文件的編號
  Delete id:刪除一個編號為id的word文件,反饋刪除是否成功
  初始時一個檔案都沒有,“新建 Microsoft Word 文件.doc”的編號算作1。

輸入格式

  第一行一個正整數n表示操作次數,接下來n行,每行表示一個操作。若該行為”New”,則表示新建,為”Delete id”則表示要刪除編號為id的文件,其中id為一個正整數。操作按輸入順序依次進行。

輸出格式

  對於輸入的每一行,輸出其反饋結果。對於新建操作,輸出新建的文件的編號;對於刪除操作,反饋刪除是否成功:如果刪除的檔案存在,則刪除成功,輸出”Successful”,否則輸出”Failed”。

樣例輸入

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

資料規模和約定

  操作次數(即輸入的行數)不超過1481
  刪除編號的數值不超過2012

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;

vector<int> v;
int a[2015];
int main(int argc, char *argv[]) {
	int cnt;
	cin>>cnt;
	string s;
	int in=1;
	int num=0;
	while(cnt--){
		cin>>s;
		if(!s.compare("New")){
			if(v.empty()){
				a[in]=1;
				cout<<in++<<endl;
			}else{
                //從小到大可以直接用vector的rbegin()和rend(),之前還寫了個比較函式^_^
				sort(v.rbegin(),v.rend());
				num=v[v.size()-1];
				a[num]=1;
				v.pop_back();				
				cout<<num<<endl;
			}			
		}else if(!s.compare("Delete")){
			cin>>num;
			if(a[num]){
				cout<<"Successful"<<endl;
				a[num]=0;
				v.push_back(num);
			}else{
				cout<<"Failed"<<endl;
			}
		}
	}	
	return 0;
}