zoukankan      html  css  js  c++  java
  • hdu 1873 优先队列题

    http://acm.hdu.edu.cn/showproblem.php?pid=1873

    真的不难,唉,可我还是参考了别人的代码,真心希望看到这篇的你自己写完这题,摆脱依赖!


    Problem Description
    看病要排队这个是地球人都知道的常识。
    不过经过细心的0068的观察,他发现了医院里排队还是有讲究的。0068所去的医院有三个医生(汗,这么少)同时看病。而看病的人病情有轻重,所以不能根据简单的先来先服务的原则。所以医院对每种病情规定了10种不同的优先级。级别为10的优先权最高,级别为1的优先权最低。医生在看病时,则会在他的队伍里面选择一个优先权最高的人进行诊治。如果遇到两个优先权一样的病人的话,则选择最早来排队的病人。

    现在就请你帮助医院模拟这个看病过程。
     
    Input
    输入数据包含多组测试,请处理到文件结束。
    每组数据第一行有一个正整数N(0<N<2000)表示发生事件的数目。
    接下来有N行分别表示发生的事件。
    一共有两种事件:
    1:"IN A B",表示有一个拥有优先级B的病人要求医生A诊治。(0<A<=3,0<B<=10)
    2:"OUT A",表示医生A进行了一次诊治,诊治完毕后,病人出院。(0<A<=3)
     
    Output
    对于每个"OUT A"事件,请在一行里面输出被诊治人的编号ID。如果该事件时无病人需要诊治,则输出"EMPTY"。
    诊治人的编号ID的定义为:在一组测试中,"IN A B"事件发生第K次时,进来的病人ID即为K。从1开始编号。
     
    Sample Input
    7
    IN 1 1
    IN 1 2
    OUT 1
    OUT 2
    IN 2 1
    OUT 2
    OUT 1 2
    IN 1 1
    OUT 1
     
    Sample Output
    2
    EMPTY
    3
    1
    1
     
    Author
    linle
    #include <stdio.h>
    #include <vector>
    #include <queue>
    #include <string.h>
    #include <iostream>
    using namespace std;
    struct hosp
    {
         int lev,z;
         //char str[5];
    };
    struct cmp
    {
         bool operator()(hosp a,hosp b)
         {
         if(a.lev==b.lev)return a.z>b.z;
         else return a.lev<b.lev;
         }
    };
    
    priority_queue<hosp,vector<hosp>,cmp> p,q,r;
    
    int main()
    {
         int n,t,i,x,y;
         char ing[5];
         hosp m;
    
         while(scanf("%d",&n)!=EOF)
         {
             while(!p.empty())p.pop();
             while(!q.empty())q.pop();
             while(!r.empty())r.pop();
             int k=1,d;
             for(i=0;i<n;i++)
             {
                 scanf("%s",ing);
                 //getchar();
                 if(ing[0]=='I')
                 {
                     scanf("%d%d",&x,&y);
                     //printf("bhfuer
    ");
                     m.lev=y;
                     m.z=k++;
                     if(x==1)
                     p.push(m);
                     if(x==2)
                     q.push(m);
                     if(x==3)
                     r.push(m);
    
                 }
                 else
                 {
                    scanf("%d",&t);
                    if(t==1)
                    {
                         if(p.empty()) printf("EMPTY
    ");
                         else
                         {
                             hosp tt=p.top();
                             p.pop();
                             printf("%d
    ",tt.z);
                         }
                    }
                    if(t==2)
                    {
                         if(q.empty()) printf("EMPTY
    ");
                         else
                         {
                             hosp tt=q.top();
                             q.pop();
                             printf("%d
    ",tt.z);
                         }
                    }
                    if(t==3)
                    {
                         if(r.empty()) printf("EMPTY
    ");
                         else
                         {
                             hosp tt=r.top();
                             r.pop();
                             printf("%d
    ",tt.z);
                         }
                    }
    
    
                 }
             }
             //while(!q[x].empty())
             //q[x].pop();
         }
    }
    

      

  • 相关阅读:
    精简的网站reset 和 css通用样式库
    bootstrap使用心得及css模块化的初步尝试
    如何更高效地定制你的bootstrap
    OOCSS的概念和思路
    圣杯布局和双飞翼布局的作用和区别
    espcms简约版的表单,提示页,搜索列表页
    Sublime快捷键
    JavaScript——理解闭包及作用
    JavaScript——基本的瀑布流布局及ajax动态新增数据
    JavaScript——之对象参数的引用传递
  • 原文地址:https://www.cnblogs.com/ccccnzb/p/3416047.html
Copyright © 2011-2022 走看看