输出描述 输出 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();
}
}
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是否相等,循环就是判断取余后是否相等。
|