• 看病要排队


    看病要排队

    Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
    Total Submission(s) : 26   Accepted Submission(s) : 13

    Font: Times New Roman | Verdana | Georgia

    Font Size:

    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

    Source

    2008浙大研究生复试热身赛(2)——全真模拟
    #include<iostream>
    #include<queue>
    #include<string>
    using namespace std;
    struct man
    {
        int jibie;//病人的级别
        int ID;//病人的ID 编号;
    
    };
    bool operator <(const man a,const man b)
    {
         if(a.jibie!=b.jibie)//按病人级别优先排序 级别不等按级别优先
         {
             return a.jibie<b.jibie;
         
         }
         if(a.jibie==b.jibie)//按病人编号优先排序
         {
             return a.ID>b.ID;
         
         }
    
    }
    int main()
    {
        int n;
        while(scanf("%d",&n)!=EOF)
        {
            priority_queue<man> d1,d2,d3;//医生1 医生2 医生3 
            int i;
            string word;
            int doctor;//医生 
            man doctor2;//用来入队列
            int k=1;//控制编号
            for(i=0;i<n;i++)
            {
                cin>>word;
                if(word=="OUT")//输出
                {
                    scanf("%d",&doctor);
                    if(doctor==1) 
                    {
                        if(!d1.empty())//不为空就输出 最高级别病人的ID
                        {
                        printf("%d
    ",d1.top().ID);
                        d1.pop();
                        }
                        else 
                        {
                            printf("EMPTY
    ");//为空就输出EMPTY
                        }
                    }
                    if(doctor==2) 
                    {
                        if(!d2.empty())//不为空就输出 最高级别病人的ID
                        {
                        printf("%d
    ",d2.top().ID);
                        d2.pop();
                        }
                        else 
                        {
                            printf("EMPTY
    ");//为空就输出EMPTY
                        }
                    
                    }
                    if(doctor==3) 
                    {
                        if(!d3.empty())//不为空就输出 最高级别病人的ID
                        {
                        printf("%d
    ",d3.top().ID);
                        d3.pop();
                        }
                        else 
                        {
                            printf("EMPTY
    ");//为空就输出EMPTY
                        }
                    }
                
                
                }//输出完毕
                if(word=="IN")// 输入
                {
                    scanf("%d",&doctor);
                    if(doctor==1)
                    {
                        scanf("%d",&doctor2.jibie);//输入级别
                        doctor2.ID=k;//输入编号
                        d1.push(doctor2);
                        k++;
                    }
                     if(doctor==2)
                    {
                        scanf("%d",&doctor2.jibie);//输入级别
                        doctor2.ID=k;//输入编号
                        d2.push(doctor2);
                        k++;
                    
                    }
                     if(doctor==3)
                    {
                        scanf("%d",&doctor2.jibie);//输入级别
                        doctor2.ID=k;//输入编号
                        d3.push(doctor2);
                        k++;
                    
                    
                    }
                    
                
                
                }//输入完毕
            
            
            }
        
        }
    
        return 0;
    }
     
     
  • 相关阅读:
    Win10 字体模糊解决(DPI缩放禁用),设置默认输入法英文
    windows下使用VS2015编译V8 JavaScript引擎(v5.5
    GDB 多线程调试:只停止断点的线程,其他线程任然执行; 或只运行某些线程 其他线程中断
    wget 显示"英国中部时间",去掉烦人的刷屏显示
    阻止事件冒泡,阻止默认事件,event.stopPropagation()和event.preventDefault(),return false的区别
    CSS
    bootstrap4 调整元素之间距离
    数据库文件结构、sqlserver ON [PRIMARY]
    快速查看数据库中每个表的数据条数
    关于LINQ中SELECT NEW 的问题
  • 原文地址:https://www.cnblogs.com/2013lzm/p/3261376.html
Copyright © 2020-2023  润新知