cola de la violencia

Entrenamiento 5 - Un título

Hacer cola para ver a un médico que es la gente de la Tierra saben sentido común.

Sin embargo, después de una cuidadosa observación de 0068, se encontró con una cola de hospital o de lujo. 0068 fue al hospital con tres médicos (sudor, tan poco) al mismo tiempo para ver a un médico. El médico que tenía la gravedad de la enfermedad, no se puede basar en un principio simple de primero en llegar, primero en ser servido. Así hospitales para cada condición, las 10 prioridades diferentes. Nivel 10 es la más alta prioridad del nivel de prioridad más baja 1. Los médicos en el momento en que el médico elegirá a una persona de la más alta prioridad de tratamiento en el cual su equipo. Si se produce el mismo paciente dos prioridad, entonces la selección de los pacientes de los primeros en alineación.

Ahora usted ayuda al hospital a ver a un médico simular este proceso.

Entrada

Los datos de entrada contiene varios casos de prueba, manejar el final del archivo.

Cada línea de datos tiene un primer número entero positivo N (0 <n <2000) indica el número de eventos.

Siguiente N líneas representan produce un evento.

Hay dos eventos:

1: "IN AB", indica que un paciente tiene prioridad de diagnóstico y tratamiento médico requisitos B a. (0 <A <= 3,0 <b <= 10)

2: "OUT A", A representa los médicos llevan a cabo un diagnóstico y el tratamiento, el diagnóstico y el tratamiento se ha completado, fue dado de alta al paciente. (0 <A <= 3)

Salida

Para cada evento "OUT A", la salida es el diagnóstico y tratamiento de personas en una fila dentro del número de identificación. Si no hay ninguna necesidad de tratamiento cuando el paciente caso, la salida "vacío".

Diagnóstico y tratamiento de personas definidas número ID es: cuando en un conjunto de pruebas, "IN A B" K-ésimo evento, viniendo en ID de paciente que es K. Numerada a partir de 1.

Ejemplo de entrada

7
IN 1 1
IN 1 2
OUT 1
OUT 2
EN 2 1
OUT 2
OUT 1
2
IN 1 1
OUT 1

Ejemplo de salida

2
VACÍO
3
1
1

#pragma warning (disable:4996)
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#define inf 0X3f3f3f3f
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 2e5 + 5;

struct N
{
	int p;
	int n;
	N(int pp, int nn)
	{
		p = pp;
		n = nn;
	}
};
bool operator<(N a, N b)
{
	if (a.p == b.p)
		return a.n > b.n;
	return a.p < b.p;
}
priority_queue<N> q[5];

int main()
{
	int n;
	while (scanf("%d", &n) != EOF)
	{
		string str;
		int id = 0;
		for (int i = 1; i <= n; i++)
		{
			cin >> str;
			if (str == "IN")
			{
				int a, b;
				scanf("%d%d", &a, &b);
				q[a].push(N(b, ++id));
			}
			if (str == "OUT")
			{
				int a;
				scanf("%d", &a);
				if (q[a].empty())
					printf("EMPTY\n");
				else
				{
					printf("%d\n", q[a].top().n);
					q[a].pop();
				}
			}
		}
		for (int i = 1; i <= 3; i++)
			while (q[i].size())
				q[i].pop();
	}
	return 0;
}

Pensando:
analógica directa a operaciones de la cola.

Publicado 27 artículos originales · ganado elogios 0 · Vistas 304

Supongo que te gusta

Origin blog.csdn.net/xukeke12138/article/details/104825305
Recomendado
Clasificación