看病(信息学奥赛一本通-T1371)
【題目描述】
有個(gè)朋友在醫(yī)院工作,想請(qǐng)BSNY幫忙做個(gè)登記系統(tǒng)。具體是這樣的,最近來(lái)醫(yī)院看病的人越來(lái)越多了,因此很多人要排隊(duì),只有當(dāng)空閑時(shí)放一批病人看病。但醫(yī)院的排隊(duì)不同其他排隊(duì),因?yàn)槎鄶?shù)情況下,需要病情嚴(yán)重的人優(yōu)先看病,所以希望BSNY設(shè)計(jì)系統(tǒng)時(shí),以病情的嚴(yán)重情況作為優(yōu)先級(jí),判斷接下來(lái)誰(shuí)可以去看病。
【輸入】
第一行輸入n,表示有n個(gè)操作。
對(duì)于每個(gè)操作,首先輸入push或pop。
push的情況,之后會(huì)輸入ai 和 bi,分別表示患者姓名和患者病情優(yōu)先級(jí)。
pop后面沒(méi)有輸入,但需要你輸出。
【輸出】
對(duì)于pop的操作,輸出此時(shí)還在排隊(duì)人中,優(yōu)先級(jí)最大的患者姓名和優(yōu)先級(jí)。
表示他可以進(jìn)去看病了。
如果此時(shí)沒(méi)人在排隊(duì),那么輸出”none”,具體可見(jiàn)樣例。
【輸入樣例】
7
pop
push bob 3
push tom 5
push ella 1
pop
push zkw 4
pop
【輸出樣例】
none
tom 5
zkw 4
【源程序】
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<string> #include<cstdlib> #include<queue> #include<vector> #define INF 0x3f3f3f3f #define PI acos(-1.0) #define N 100001 #define MOD 123 #define E 1e-6 using namespace std;struct Node {int num;int grade;char id[N]; } s; bool operator < (const Node &x, const Node &y) {if (x.grade == y.grade)return x.num < y.num; return x.grade > y.grade; } char str[N], name[N]; priority_queue<Node> q; int main() {int n;scanf("%d\n",&n);int k = 1;for (int i = 1; i <= n; i++) {scanf("%s",str);if (strcmp(str, "push") == 0) {int a;scanf("%s%d",name,&a);s.grade = k;s.num = a;for (int j = 0; j < strlen(name); j++)s.id[j] = name[j];q.push(s); } else {if (!q.empty()) {s = q.top();q.pop();printf("%s %d\n", s.id, s.num);} elseprintf("none\n");}}return 0; }?
總結(jié)
以上是生活随笔為你收集整理的看病(信息学奥赛一本通-T1371)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 计算2的N次方(信息学奥赛一本通-T11
- 下一篇: 动态规划 —— 背包问题 —— 背包问题