UvaLive 6440 - Emergency Handling(数据结构)

原创 2014年08月01日 15:54:24

题目链接

UvaLive 6440 - Emergency Handling

题意:输入一个N,n次操作。对于第一种操作增加一个病人,告诉病人的t0,st0,r。第二种操作,在时间t,选取一个病情最严重的病人进行医治。病人的严重情况为S(t)=st0+r(t-t0)。如果病人严重情况相同,选r最大的进行医治。(1<=N <=100 000),(0<=r<=100。对于第二种操作输出被治疗的病人。

我们可以让S(t)函数变一种形式,S(t)=st0-rt0+rt,因为st0-rt0是一个定值,我们把它记为x,那么S(t)=x+r*t.。对于r相同的病人来说随着t的增加他们的相对大小是不会变的,由于r很小,所以我们把r相同的病人放入同一个优先队列,每次询问的时候在枚举每个优先队列,就可以求出s(t)最大的病人。代码如下:

#include<iostream>
#include<stdio.h>
#include<queue>
#include<string.h>
#include<algorithm>
#include<math.h>
#define inff 0x3ffffff
typedef long long LL;
using namespace std;
int n;
priority_queue<int>que[110];
void init()
{
    int i;
    for(i=0;i<=100;i++)
    {
        while(que[i].size())
            que[i].pop();
    }
}
int main()
{
    int t,i,j;
    char s[5];
    scanf("%d",&t);
    LL ix,fc;
    int id;
    int cas=1;
    while(t--)
    {
        init();
        scanf("%d",&n);
        int t0,st0,r;
        printf("Case #%d:\n",cas++);
        for(i=1;i<=n;i++)
        {
            scanf("%s",s);
            if(s[0]=='P')
            {
                scanf("%d%d%d",&t0,&st0,&r);
                que[r].push(st0-r*t0);
            }
            else
            {
                scanf("%d",&t0);
                ix=-inff;
                id=-1;
                for(j=100;j>=0;j--)
                {
                    if(que[j].size()==0)
                        continue;
                    fc=que[j].top();
                    fc=fc+(LL)j*t0;
                    if(fc>ix)
                    {
                        ix=fc;
                        id=j;
                    }
                }
                que[id].pop();
                printf("%lld %d\n",ix,id);
            }
        }
    }
    return 0;
}


 

UVALive 6440 Emergency Handling 【思维好题啊!!! + 优先队列处理】

传送门 // 题意: 给定n个操作, 如果是f表示有一个病人来就诊, a代表医院可以接受一个病人, 选择的规则为首先选严重程度最严重的, 如果相同就想等级高的, 在相同就可以随意选了. 病人的严重程...
  • Anxdada
  • Anxdada
  • 2018年01月13日 19:43
  • 21

解决Ubuntu启动时出现“welcome to emergency mode”的问题

问题描述: 我用的是Windows 10 和Ubuntu16.04,每次在Windows中关机然后再开机进入Ubuntu中会出现“”welcome to emergnecy mode“”的问题,但是...
  • Nicholas_Wong
  • Nicholas_Wong
  • 2017年04月13日 14:23
  • 1431

ubuntu 16.04开机进入emergency mode的一种可能

今日开机后突然进入emergency mode,胡乱折腾一通,终于找到问题所在,查阅资料后终于解决了问题。 起因:电脑是win10+ubuntu双系统,前一日在win10上运行虚拟机做实验时,突...
  • Flora_C
  • Flora_C
  • 2016年12月02日 16:02
  • 3201

linux启动和grub修复

CentOS 5和6的启动流程linux组成 linux:是有kernel和+rootfs (linux内核加应用程序) kernel :进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能 ...
  • ITlinuxP
  • ITlinuxP
  • 2018年01月04日 19:24
  • 50

UVALive 4670(AC自动机)

题意:有n个串,输出在t串出现次数最多的那个串,如果有多个按照输入顺序输入 题解:模板多,长度短,文本串长。适合多模式串匹配,适用AC自动机,这里使用map映射stirng为...
  • qq_24489717
  • qq_24489717
  • 2016年02月26日 18:14
  • 337

Ubuntu 15.04 开机无法进入图形界面,自动进入emergency mode解决方法

注:该问题可能由于不同的原因所致,楼主只是介绍自己的经验之谈,也即鄙人所遇到的情况。 某些情况下无法进入ubuntu 15.04 的图形界面,界面提示 GIVE root password ...
  • ariera
  • ariera
  • 2015年09月28日 14:26
  • 8642

Linux系统CentOS7中,fstab出错,系统重启进入emergency mode的解决办法

/etc/fstab是系统的自动挂载配置文件,每一次系统启动,都要读该文件。fstab文件出现错误,会导致系统无法启动。下面是系统无法启动,进入emergency mode的解决办法。 1.错误的/...
  • A_1013
  • A_1013
  • 2015年10月18日 22:22
  • 2810

UVALive 6837 (最小生成树)

题意是给定一个联通图,求这个图的最小生成树的不可替代边有哪些,并计算这些边的总权值. 先求出任意一棵MST,然后标记树边和非树边,然后枚举非树边,对于非树边的两个点u,v,在MST中如果u->v的路...
  • morejarphone
  • morejarphone
  • 2015年12月07日 13:32
  • 275

PAT 1003. Emergency (25) (求两点间最短路的条数)

1003. Emergency (25) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 ...
  • IAccepted
  • IAccepted
  • 2014年03月18日 12:19
  • 7767

uvalive 4356 火势控制系统

在平面上有n个目标点,目标是找出一个圆心在(0,0)点处的扇形,至少覆盖其中的k个点,使得该扇形的面积最小 思路先枚举r再枚举角度 #include #include #include ...
  • u014664226
  • u014664226
  • 2015年06月15日 21:34
  • 901
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UvaLive 6440 - Emergency Handling(数据结构)
举报原因:
原因补充:

(最多只允许输入30个字)