题目描述
CLZ 银行只有两个接待窗口,VIP窗口和普通窗口,VIP 用户进入 VIP 窗口排队,剩下的进入普通窗口排队。现有 M次操作,操作有四种类型,如下:
- IN name V:表示一名叫- name的用户到 VIPVIP 窗口排队
- OUT V:表示 VIPVIP 窗口队头的用户离开排队
- IN name N:表示一名叫- name的用户到普通窗口排队
- OUT N:表示普通窗口队头的用户离开排队
求 M次操作结束后 VIP 窗口队列和普通窗口队列中的姓名。
输入描述
第一行是一个整数 M(1≤M≤1000),表示一共有 M次操作。
第二行到第 M+1行输入操作,格式如下:
- IN name V
- OUT V
- IN name N
- OUT N
输出描述
输出 M次操作后 VIP窗口队列和普通窗口队列中的姓名(从头到尾),先输出 VIP 窗口队列后输出普通窗口队列。
输入输出样例
示例 1
5
IN xiaoming N
IN Adel V
IN laozhao N
OUT N
IN CLZ V
Adel
CLZ
laozhao这道题可以直接用C++的queue容器,然后注意下几个点:queue容器没有迭代器,更不支持随机访问,然后pop()是移除并没有返回值,要返回值的用front()或back();然后其他的就比较容易了
我的做法如下:
  
#include <iostream>
#include <queue>
using namespace std;
#include <string>
//定义两个队列
queue<string> V,N;
int main()
{
  // 请在此输入您的代码
  int M;
  string flag,name;    //flag判断是进还是出
  char type;           //type判断是vip客户否
  cin >> M;
  //做M次操作
  for(int i=1;i<=M;i++)
  {
    cin >> flag;
    if(flag=="IN")
    {
      cin >> name >> type;
      if(type=='N')
      {
         N.push(name); 
      }else if(type=='V')
      {
        V.push(name);
      }
    }else if(flag=="OUT")      //这里注意当为out时下面输入只用type而不用name
    {
      cin >> type;
      if(type=='N')
      {
         N.pop(); 
      }else if(type=='V')
      {
        V.pop();
      }
    }
  }
  //注意 队列不提供迭代器,更不支持随机访问
  while(!V.empty())
  {
    cout << V.front() <<endl;
    V.pop();
  }
  while(!N.empty())
  {
    cout << N.front() <<endl;
    N.pop();
  }
  return 0;
}









