Tema Descripción
CLZ Bank tiene solo dos ventanas de recepción, la ventana VIP y la ventana ordinaria. Los usuarios VIP ingresan a la ventana VIP para hacer cola, y el resto ingresa a la ventana ordinaria para hacer cola. Hay M operaciones, y hay cuatro tipos de operaciones, como sigue:
IN name V
: Indica que unname
usuario designado hace cola en la ventana VIPVIPOUT V
: Indica que el usuario que encabeza la cola en la ventana VIPVIP abandona la colaIN name N
: Indica que un usuario designadoname
hace cola en la ventana normalOUT N
: Indica que el usuario que encabeza la cola de la ventana normal abandona la cola
Encuentre los nombres en la cola de la ventana VIP y la cola de la ventana normal después de completar las operaciones M.
ingrese la descripción
La primera línea es un número entero M (1≤M≤1000), lo que indica que hay un total de M operaciones.
Operaciones de entrada desde la segunda línea a la línea M+1, el formato es el siguiente:
IN name V
OUT V
IN name N
OUT N
descripción de salida
Muestra los nombres en la cola de la ventana VIP y la cola de la ventana normal (de principio a fin) después de las operaciones M, primero genera la cola de la ventana VIP y luego genera la cola de la ventana normal.
Muestras de entrada y salida
Ejemplo 1
ingresar
5
IN xiaoming N
IN Adel V
IN laozhao N
OUT N
IN CLZ V
producción
Adel
CLZ
laozhao
Esta pregunta puede usar directamente el contenedor de la cola de C++ y luego prestar atención a los siguientes puntos: el contenedor de la cola no tiene un iterador y no admite el acceso aleatorio, y luego pop() se elimina y no tiene valor de retorno. quiere devolver un valor, use front() o back(); entonces el resto es más fácil
Mi enfoque es el siguiente:
#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;
}