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
*/