Preguntas de práctica de Blue Bridge Cup <Bank Queue>

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 un  name usuario designado hace cola en la ventana VIPVIP
  • OUT V: Indica que el usuario que encabeza la cola en la ventana VIPVIP abandona la cola
  • IN name N: Indica que un usuario designado  name hace cola en la ventana normal
  • OUT 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;
}

Supongo que te gusta

Origin blog.csdn.net/mc10141222/article/details/123696953
Recomendado
Clasificación