http://poj.org/problem?id=1886
#include<iostream> #include<cstdio> #include<algorithm> #include<string> #include<vector> #include<map> using namespace std; struct book { string author; int status; }; map<string, book> books; vector<string> name; bool compare(string a, string b) { if(books[a].author == books[b].author) return a < b; else return books[a].author < books[b].author; } int main() { string x,z,m; book y; while(getline(cin,m)) { if(m == "END") break; x = m.substr(0, m.find_last_of("\"")+1); y.author = m.substr(m.find_last_of("\"")+1); name.push_back(x); books[x]= y; } sort(name.begin(), name.end(), compare); for(int i = 0; i < name.size(); i++) books[name[i]].status = 1; while(cin >> x) { if(x == "END") break; if(x == "BORROW") { getchar(); getline(cin, z); books[z].status = 0; } if(x == "RETURN") { getchar(); getline(cin, z); books[z].status = -1; } if(x == "SHELVE") { for(int i = 0; i < name.size(); i++) if(books[name[i]].status == -1) { int j; for(j = i; j >= 0; --j) if(books[name[j]].status == 1) break; if(j > -1) cout << "Put " << name[i] << " after " << name[j] << endl; else cout << "Put " << name[i] << " first" << endl; books[name[i]].status = 1; } cout << "END" << endl; } } return 0; } /* "The Canterbury Tales" by Chaucer, G. "The Canterbury Taless" by Chaucer, B. "Algorithms" by Sedgewick, R. "The C Programming Language" by Kernighan, B. and Ritchiee, D. "The C Programming Languag" by Kernighan, B. and Ritchiee, D. "The D Programming Language" by Kernighan, B. and Ritchiee, D. "A House for Mr. Biswas" by Naipaul, V.S. "A Congo Diary" by Naipaul, V.S. END BORROW "Algorithms" BORROW "The C Programming Language" BORROW "The C Programming Languag" BORROW "The Canterbury Taless" SHELVE RETURN "Algorithms" SHELVE RETURN "The C Programming Languag" SHELVE BORROW "The C Programming Languag" BORROW "The Canterbury Taless" BORROW "A House for Mr. Biswas" RETURN "The Canterbury Taless" SHELVE RETURN "The C Programming Language" RETURN "A House for Mr. Biswas" SHELVE END ans is END Put "Algorithms" after "A House for Mr. Biswas" END Put "The C Programming Languag" after "The Canterbury Tales" END Put "The Canterbury Taless" first END Put "The C Programming Language" after "The Canterbury Tales" Put "A House for Mr. Biswas" after "A Congo Diary" END */ /* "The Canterbury Tales" by Chaucer, G. "Algorithms" by Sedgewick, R. "The C Programming Language" by Kernighan, B. and Ritchie, D. END BORROW "Algorithms" BORROW "The C Programming Language" RETURN "Algorithms" RETURN "The C Programming Language" SHELVE END ans is Put "The C Programming Language" after "The Canterbury Tales" Put "Algorithms" after "The C Programming Language" END*/ /* "The Canterbury Tales" by Chaucer, G. "Algorithms" by Sedgewick, R. "The C Programming Language" by Kernighan, B. and Ritchie, D. END BORROW "Algorithms" BORROW "The C Programming Language" SHELVE RETURN "Algorithms" SHELVE BORROW "The Canterbury Tales" RETURN "The C Programming Language" SHELVE RETURN "The Canterbury Tales" SHELVE */ /* ans is END Put "Algorithms" after "The Canterbury Tales" END Put "The C Programming Language" first END Put "The Canterbury Tales" first END */