Joeferyの博客

不忘初心,方得始终。

UVALive - 3135 Argus【优先队列】

题目链接


题意:有一系列的事件,它每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;
}


阅读更多
版权声明:写得不好,希望大家及时指出,共同进步(っ °Д °;)っ另外转载也希望注明一下出处,蟹蟹~ https://blog.csdn.net/Bcwan_/article/details/51559003
文章标签: acm 算法 uva
相关热词: uvalive
上一篇UVA - 11991 Easy Problem from Rujia Liu?【STL】
下一篇CodeForces - 630C Lucky Numbers【计数】
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭