题目由来:1489 - 叫号软件-东方博宜OJ
注 ^(* ̄(oo) ̄)^:一定要认真思考完解析再将代码复制哦~
旺 U•ェ•*U : 有不明白的地方发在评论区
制作不易,点个赞再看呗~o((⊙﹏⊙))o
题目描述:
课代表 SW 由于工作失误被扣了奖学金,所以他不得不去某家饭店打工,饭店很火爆,经常没有位置,所以不得不叫号。
他管理叫号软件,一天他不小心把叫号软件的程序删除了,他感觉他完蛋了, 正准备跑路,善良的你不忍心他丢工作你能帮他重新写一个叫号软件吗?
软件有三个指令:
-
END
为结束程序。 -
PUSH NAME
为新来了一个名字叫做NAME
的人排队,NAME
的长度小于等于 1010 ,且NAME
没有重复。 -
POP
为如果有人在排队则输出当前队列中来的最早的人的名字并将其从队列里删除,如果队列没有人输出EMPTY
。
输入:
输入可能有若干行(保证不超过 100000100000),每行一个如下的命令:
PUSH NAME
(NAME
没有空格)。
POP
。
END
。
其中,END
命令只会在最后一行出现,并且保证有END
。 输入 END
命令后立刻结束程序。
输出:
针对每个 POP
命令输出一行,如果有人在排队则输出当前队列中来的最早的人的名字并将其从队列里删除。否则,输出EMPTY
。
样例:
输入:
PUSH LZX PUSH CQW POP PUSH SW POP POP POP END
输出:
LZX CQW SW EMPTY
代码 [解答]+[解析完整]:
#include<bits/stdc++.h>
using namespace std;
string s,name;
queue<string> a;//由题可知,可以应用 队列queue 解决
int main()
{
while(cin>>s)
{
if(s=="PUSH") //当输入指令"PUSH"
{
cin>>name;
a.push(name); //把输入的客人名字添加到队列当中
}
if(s=="POP")
{
if(a.empty())
{
cout<<"EMPTY"<<endl;
}
else
{
cout<<a.front()<<endl;
a.pop();
}
}
if(s=="END")
{
break;
}
}
}