| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
注意,即使没有书归还,当遇到SHELVE后依然要输出一个END#include <iostream>
#include <string>
#include <set>
#include <map>
using namespace std;
struct Book{
string title;
string author;
Book(){}
Book(const string& t, const string& a): title(t), author(a){}
};
class Library{
private:
map<string, string> dataBase;
struct Compare{
bool operator()(const Book& a, const Book& b){
if(a.author != b.author) return a.author < b.author;
return a.title < b.title;
}
};
set<Book, Compare> stock;
set<Book, Compare> returned;
public:
void Add(const Book& book){
stock.insert(book);
dataBase[book.title] = book.author;
}
void Borrow(const string& title){
stock.erase(Book(title, dataBase[title]));
}
void Return(const string& title){
returned.insert(Book(title, dataBase[title]));
}
void Shelve(){
set<Book, Compare>::iterator iter = returned.begin(), eter = returned.end(), it;
for(; iter != eter; ++iter){
it = stock.insert(*iter).first;
cout << "Put \"" << iter->title << "\"";
if(it == stock.begin()) cout << " first\n";
else cout << " after \"" << (--it)->title << "\"\n";
}
cout << "END\n";
returned.clear();
}
};
int main()
{
ios::sync_with_stdio(false);
string s, END("END");
string::size_type pos;
Library lib;
while(getline(cin, s), s != END){
pos = s.rfind('\"');
lib.Add(Book(s.substr(1, pos - 1), s.substr(pos + 5)));
}
while(getline(cin, s), s != END){
if(s[0] == 'B') lib.Borrow(s.substr(8, s.size()-9));
else if(s[0] == 'R') lib.Return(s.substr(8, s.size()-9));
else lib.Shelve();
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator