C++挑选书籍
小明是一位非常好学的同学。为了充分利用寒假的空闲时光,小明打算带一些书回家阅读。这些书分为5个类别:数学(MATH)、哲学(PHIL)、经济学(ECON)、文学(LITE)和艺术(ART)。小明有很多书,但是由于小明的行李箱空间有限,只能带不超过3本书回家。
为了挑选适合带回家的书,小明为每本书设定了一个期望值。不同的书有不同的书名,期望值也不同。期望值越大,小明就越倾向于带它回家。小明决定通过整理这些书,确定带哪些书回家,请你帮他编写整理书的程序。
整理前,书摞为空,整理的过程由一系列操作组成,最终形成一摞书。每个操作一定是以下4种操作之一:
输入语法为:ENLIST [类别] [书名] [期望值]。
表示添加一本书到书摞的顶部,这本书的类别、书名、期望值为输入指定。
例如,操作 ENLIST ECON DASKAPITAL 88 表示添加一本名为《DASKAPITAL》的经济学的书到书摞的顶部,而且小明的期望值为88。
输入语法为:REMOVE [书名]。
表示从书摞中删除一本输入指定书名的书。如果书摞中没有指定书名的书,则不执行任何操作。
例如,操作 REMOVE BAYESIAN 表示删除书摞中名为《BAYESIAN》的书。
输入语法为:REFINE [类别]。
表示将书摞中指定类别的书全部删除,只保留一本期望值最大的书放到书摞顶部。若指定类别的书不存在,则不执行任何操作。
例如,操作 REFINE ECON 表示删除所有的经济类的书,仅保留期望值最大的一本放回书摞的顶部。
输入语法为:CLEANUP [类别]。
表示将书摞中指定类别的书全部删除,并将剩余的所有书按期望值排序,使得期望值较大的书放在上面。若指定类别的书不存在,则不执行删除操作,只进行排序。
例如,CLEANUP LITE 表示删除书摞中的所有文学类的书,并将剩余的书排序。
输入T个操作,请问最终书摞顶部的三本书是什么?
第一行为一个整数 TT,表示操作数量。
接下来的 TT 行,每行输入一个操作。
自顶向下输出书摞最顶端的三本书;如果书摞中书的数量不足三本,则自顶向下输出所有书;如果书摞中没有书,输出 NULL。 在输出每本书时,应输出一行,包括:书的类别、书名和期望值,它们之间由一个空格分隔。
样例输入:
8
ENLIST MATH BAYESIAN 90
ENLIST PHIL METHODS 80
ENLIST ECON DASKAPITAL 88
ENLIST LITE HARRY 85
ENLIST ART DAVINCI 95
REMOVE BAYESIAN
REFINE ECON
CLEANUP LITE
样例输出:
ART DAVINCI 95
ECON DASKAPITAL 88
PHIL METHODS 80
传送门:https://pan.baidu.com/s/19ik-NgRX4Hv6R-qkx8Rk9Q?pwd=1111