UVA 1203 Argus(优先队列)

原创 2014年04月21日 13:12:43

UVA 1203 Argus(优先队列)

题意:

        给你多个命令,每个命令如Register 2004 200 对应于编号为2004的事件,每隔200秒发生一次(首次发生是在200秒).然后在给你一个K,要你输出前K个发生事件的编号.如果几个事件同时发生,输出事件编号小的.

分析:

        刘汝佳训练指南P188例题.

        本题只需要维护一个优先队列即可,每次从队列中取出时间最小且编号最小的事件,输出其编号,然后将其发生时间加上一个周期再从新放入优先队列即可.

AC代码(新):

#include<queue>
#include<cstdio>
#include<string>
#include<iostream>
using namespace std;

struct Node
{
    int id;
    int time;
    int period;

    Node(int id,int time,int period):id(id),time(time),period(period){}

    bool operator<(const Node &rhs)const
    {
        return time>rhs.time || ( time==rhs.time && id>rhs.id );
    }
};

int main()
{
    string com;//Register
    priority_queue<Node> Q;

    while(cin>>com)
    {
        if(com=="#") break;

        int id,time;
        cin>>id>>time;

        Q.push(Node(id,time,time));
    }

    int k;
    scanf("%d",&k);

    while(k--)
    {
        Node tmp = Q.top(); Q.pop();
        cout<<tmp.id<<endl;

        tmp.time += tmp.period;
        Q.push(tmp);
    }

    return 0;
}

AC代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
struct node
{
    int num;
    int time;
    int period;
    bool operator<(const node&b)const
    {
        return time>b.time ||(time==b.time&&num>b.num);
    }
};
int main()
{
    priority_queue<node> pq;
    char s[1000];
    int k;
    while(scanf("%s",s)==1&&s[0]!='#')
    {
        node r;
        scanf("%d%d",&r.num,&r.period);
        r.time=r.period;
        pq.push(r);
    }
    scanf("%d",&k);
    while(k--)
    {
        node r=pq.top();pq.pop();
        printf("%d\n",r.num);
        r.time+=r.period;
        pq.push(r);
    }
    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Beijing 2004 / UVa 1203 / UVALive 3135 / ZOJ 2212 Argus (优先队列)

Argus Time Limit: 2 Seconds      Memory Limit: 65536 KB A data stream is a real-time, continuous, ...

UVALive3135 UVA1203 POJ2051 ZOJ2212 Argus【优先队列】

Argus Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 11450   Accepted: 5545 ...

LA3135:Argus(优先队列)

A data stream is a real-time, continuous, ordered sequence of items. Some examples include sensor da...

UVALive - 3135 - Argus (优先队列!!)

UVALive - 3135 Argus Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %...

POJ2051 Argus 优先队列

Argus Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 11204   Accepte...
  • lwgkzl
  • lwgkzl
  • 2016年11月13日 10:38
  • 78

【优先队列之多路归并】UVALive 3135 Argus

UVALive 3135 Argus http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18684题意 编写一个系统执行一系列...

uva 11997 K Smallest Sum(多路并归+优先队列)

题意:给出k个包含k个数的

K Smallest Sums(Uva 11997) 多路归并+优先队列

来自《算法竞赛入门经典训练指南》 1.题目原文 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=s...

UVa 12266 Stock Prices (优先队列)

12266 - Stock Prices Time limit: 3.000 seconds  http://uva.onlinejudge.org/index.php?option=onlineju...

UVA 11573 - Ocean Currents【BFS+优先队列】

题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&probl...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UVA 1203 Argus(优先队列)
举报原因:
原因补充:

(最多只允许输入30个字)