暴力キュー

トレーニング5 - タイトル

これは地球の人々が常識を知っている医者にキューに。

しかし、0068の注意深い観察の後、彼は病院のキューや豪華なを見つけました。0068は、医師の診察をすると同時に、3人の医師(ので、少し汗、)で病院に行きました。疾患の重症度を持っていた医師は、それが最初に務め、最初に来るの単純な原理に基づいてすることはできません。各条件のための病院、10個の異なる優先順位ので。レベル10は最低の優先度レベル1の最優先事項です。一度医師は、医師は彼のチームでの治療のための最高の優先順位の人を選択します。あなたが同じ2つの優先度の患者が発生した場合は、最初の患者の選択がラインアップします。

今、あなたは、医師は、このプロセスをシミュレート参照するには病院を助けます。

入力

入力データは、ファイルの終わりを扱う、いくつかのテストケースが含まれています。

各データ線は、Nの整数第一正(0 <N <2000)はイベントの数を示しています。

次のNラインは、イベントが発生表します。

2つのイベントがあります。

1:「IN AB」は、患者が優先B A医師の診断と治療の要件を有していることを示しています。(0 <A <= 3,0 <B <= 10)

2:診断と治療が完了した「OUT A」、Aは、医師が診断と治療を行っ表し、患者は退院しました。(0 <A <= 3)

出力

各「OUT A」イベントのため、出力は、ID番号内部行の人々の診断および治療です。ときに患者イベント処理のための必要がない場合は、出力が「空」。

診断およびID番号に定義人々の治療である:一連のテストでは、「IN A B」K番目のイベントは、Kである患者IDに来たとき 1から始まる番号が振られています。

サンプル入力

7
件1
1 IN 2
OUT 1
OUT 2
、IN 2 1
OUT 2
OUT 1
2
1 IN 1
OUT 1

サンプル出力

2
EMPTY
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;
}

思考:
キュー操作への直接アナログ。

公開された27元の記事 ウォンの賞賛0 ビュー304

おすすめ

転載: blog.csdn.net/xukeke12138/article/details/104825305