microhhh的图书管理系统

时间限制: 10 ms 内存限制: 5000 kb
总通过人数: 0 总提交人数: 0

题目描述

microhhh通过传送回到了他的基地,终于可以进行一段时间的休整了。基地中有一个超级图书馆,拥有2.1亿件藏品:其中有470种语言写成印刷品1亿多件,包括1800多万册图书;980多万册特殊图书、古版书、专著、连续出版物、乐谱、装订报纸、小册子、技术报告及其他印刷品,其中永久收藏的期刊75000种、报纸1200种;8850万件特殊收藏品,包括250万件各种录音资料、490万张地图、5500万页手稿、1330万件缩微品、1350万件可视资料,包括80万盘电影胶片、1200万张照片、85000张招贴画;40万件版画和绘画等。(猜猜这是哪个图书馆?)

借书的人们常常使microhhh很头疼,因为他们常常不把书放回原处,而是把归还的书都放在桌上,直到microhhh把书放回原位。即使是microhhh,把书放在正确的地方也非常耗时。所以microhhh需要一个程序。

当借书人借走或者归还一本书,计算机都会记录下书的书名。每隔一段时间,microhhh会向程序询问归还的书的清单,以便它们回到书架上原有的位置。在它们回到书架之前,书架上的书已经按照作者,然后是书名的 ASCII排好了序(即作者为第一关键字,书名为第二关键字排序)。程序需要输出归还的书在书架上的正确位置。对于每本归还的书,程序应该告诉microhhh书架上的哪本书(包括之前放在书架上的)在这本书之前。 现在microhhh把这个任务交给了你,请你编写一个程序。

输入

一组很大的数据
首先,所有书都会被列出,每本书一行,没有先后顺序。最初,它们都在书架上。任意两本书书名不同。每行格式为: 书名" by 作者
书单的结束由一行单独的END表示
接下来是借还书和microhhh的询问的记录。每条记录一行,格式如下:
BORROW 书名
RETURN 书名
SHELVE
结束由一行单独的END表示

输出

对每一个SHELVE,请输出如下格式:
Put 书名1 after 书名2
或者,放在第一位的书:
Put 书名 first
输出最后用单独一行END表示结束

书名最多包含80个字符
作者最多包含80个字符
书名不会包含双引号(")

输入样例

"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

输出样例

Put "The C Programming Language" after "The Canterbury Tales"
Put "Algorithms" after "The C Programming Language"
END

Hint

注意需要使用getchar等读掉多余的换行符,可能的程序框架

 #include<bits/stdc++.h>//使用标准C++所有头文件
 using namespace std;

 struct book
{
string author;
int status;
};

bool compare(string a, string b)
{
...
}

int main()
{

string x,z,m;
book y;
while(getline(cin,m))
{
    if(m == "END") break;
    ...
}
sort(...);
...
while(cin >> x)
{
    if(x == "END") break;
    if(x == "BORROW")
    {
        getchar();
        ...
    }
    if(x == "RETURN")
    {
        getchar();
        ...
    }
    if(x == "SHELVE")
    {
        ...
    }
}
}

相关推荐