UVALive - 3135 Argus【优先队列】

题目链接


题意:有一系列的事件,它每Period秒钟就会产生编号为qNum的事件,你的任务是模拟出前k个事件,如果多个事件同时发生,先处理qNum小的事件

用优先队列解决多路并归的基础题,把k个有序表合成一个有序表。


#include
#include
#include
#include
#include
#include
#include

using namespace std;
struct Str{
    int Qnum,Period,Time;
    bool operator <(const Str& a)const{
        return Time>a.Time||(Time==a.Time&&Qnum>a.Qnum);
    }
};
int main()
{
    priority_queueque;
    char s[20];
    while(scanf("%s",s)&&s[0]!='#'){
        Str item;
        scanf("%d%d",&item.Qnum,&item.Period);
        item.Time=item.Period;
        que.push(item);
    }
    int K;
    scanf("%d",&K);
    while(K--){
        Str r=que.top();
        que.pop();
        printf("%d\n",r.Qnum);
        r.Time+=r.Period;
        que.push(r);
    }

    return 0;
}


你可能感兴趣的:(->,数据结构,<-,优先队列,UVALive)