输出描述
输出 MM 次操作后 VIPVIP 窗口队列和普通窗口队列中的姓名(从头到尾),先输出 VIPVIP 窗口队列后输出普通窗口队列。
输入输出样例
示例 1
输入
5
IN xiaoming N
IN Adel V
IN laozhao N
OUT N
IN CLZ V
copy
输出
Adel
CLZ
laozhao
copy
运行限制
最大运行时间:1s
最大运行内存: 128M
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <queue>
using namespace std;
queue<string>vip;
queue<string>ordinary;
int main()
{
int m;
string state,name,kind;
cin>>m;
while(m--)
{
cin>>state;
if(state=="IN")
{
cin>>name>>kind;
if(kind=="V") vip.push(name);
else ordinary.push(name);
}
else
{
cin>>kind;
if(kind=="N"&&!ordinary.empty())ordinary.pop();
else if(kind=="V"&&!vip.empty()) vip.pop();
/*else*/
}
}
while(!vip.empty())
{
cout<<vip.front()<<endl;
vip.pop();
}
while(!ordinary.empty())
{
cout<<ordinary.front()<<endl;
ordinary.pop();
}
return 0;
}
对于队列,我买的9元课上的文件我感觉都是爆力算法,没有技巧性,没有学过的话也能这么写,可能这东西本身就不难,还是用了stl库中的queue,起码省了一些步骤,对于循环队列,感觉就是大数算法一类的,用取余的方式来使得数组开的空间足够,不如直接用stl,毕竟也是c++语言使用的,输入输出流用的心慌,总感觉会超时,但是string的输入输出用流比较方便,讲义里讲的取余算法估计用不上,上一次说的判断队列是否为空,直接用了empty()省了再去费事了,写判断函数的话就是判断head与last是否相等,循环就是判断取余后是否相等。