题目大意:
现在有一个聊天界面(可以想象为一个队列),请你模拟以下操作:
- Add u: 在队列中加入一个优先级为u的窗口。如果已经存在同优先级的窗口,输出”same priority.”,否则输出 “success.”。
- Close u:将队列中优先级为u的窗口关闭。如果不存在优先级为u的窗口,输出”invalid priority.” 否则输出”close u with c.”,其中c是和优先级为u的窗口的聊天次数。
- Chat w:向当前在最顶端的窗口输入w句话。如果当前队列中没有窗口,输出”empty.” 否则输出”success.”。
- Rotate x:将当前排在第x位的窗口翻转到最前面。如果x非法,输出”out of range.” 否则输出”success.”。
- Prior:将优先级最高的窗口翻转到最前面。如果当前队列中没有窗口,输出”empty.” 否则输出”success.”。
- Choose u:将优先级为u的窗口翻转到最前面。如果当前队列中没有此窗口,输出”invalid priority.” 否则输出”success.”。
- Top u:将优先级为u的窗口置顶。如果当前队列中没有此窗口,输出”invalid priority.” 否则输出”success.”。
- Untop:取消当前置顶的窗口。如果当前没有置顶的窗口,输出”no such person.” 否则输出 “success.”。
解题思路:
我们可以用vector来模拟这个“队列”,里面的元素为记录优先级&聊天次数的pair对,然后直接做就好了(可以通过写一些函数来模块化一些操作来减少代码量)。
PS:对于置顶这个操作,可以直接用一个变量来记录优先级,通过优先级找到它在队列中的原始位置,因为这个值是不变的,对于后续操作十分方便。
PPS:active时不要忘记忽略掉聊天次数为0的那些窗口。
Mycode:
1 |
|