关闭

UVALive - 3135 Argus【优先队列】

标签: acm算法uva
195人阅读 评论(0) 收藏 举报
分类:

题目链接


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

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


#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>

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_queue<Str>que;
    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;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:33475次
    • 积分:1605
    • 等级:
    • 排名:千里之外
    • 原创:130篇
    • 转载:3篇
    • 译文:0篇
    • 评论:4条
    最新评论