トレーニング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;
}
思考:
キュー操作への直接アナログ。