一家医院比较繁忙,病人需要排队,病人有个病重程度,给出病人在送来的初始病重程度和送来的时间以及随时间恶化的程度,每次接待病人接待病重程度最高的,相同就接待随时间恶化程度比较严重的。
直接用优先队列模拟就可以了,priority_queue<int>q[110];把随时恶化程度对应的病人push进对应相应的相应的队列,根据每一次输入的字符是S或是A选择是压进队列还是从所有队列中挑选出最符合的病人出队并输出。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <queue>
#include <algorithm>
#include <cstdlib>
#include <iomanip>
#define inf (1<<29)
using namespace std;
int n;
int t0,r,a;
char s[2];
int maxv;
int st;
priority_queue<int>q[110];
int main()
{
int t;
int k=1;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
j=0;
for(int i=0;i<110;i++)
{
while(!q[i].empty())
{
q[i].pop();
}
}
printf("Case #%d:\n",k++);
while(n--)
{
scanf("%s",s);
if(s[0]=='A')
{
scanf("%d",&a);
int p=-1;
maxv=-1;
for(int i=0;i<110;i++)
{
if(!q[i].empty())
{
if(maxv<=q[i].top()+(a*i))
{
maxv=q[i].top()+(a*i);
p=i;
}
}
}
q[p].pop();
printf("%d %d\n",maxv,p);
}
else
{
scanf("%d%d%d",&t0,&st,&r);
st-=t0*r;
q[r].push(st);
}
}
}
return 0;
}