UVA 6440 Emergency Handling 队列

47 篇文章 0 订阅
6 篇文章 0 订阅

一家医院比较繁忙,病人需要排队,病人有个病重程度,给出病人在送来的初始病重程度和送来的时间以及随时间恶化的程度,每次接待病人接待病重程度最高的,相同就接待随时间恶化程度比较严重的。

直接用优先队列模拟就可以了,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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值