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;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013480600/article/details/24245021

uva 1203—— Argus

题意:给定一个阿格斯系统,每个period周期都会产生一次编号为Q_num的事件,任务是模拟前k个事件。 思路:直接按照优先队列的方法来模拟和构造即可。 code: #include usi...
  • bobodem
  • bobodem
  • 2016-03-14 20:54:34
  • 232

Uva 1203 Argus

用优先队列来维护每个触发器的下一个时间,然后每次从中取出最早发生的一个,重复k次即可。时间复杂度为klogn。 #include #include #include #include #in...
  • Unin88
  • Unin88
  • 2015-01-31 15:23:53
  • 265

UVA - 1203 Argus 直接爆

#include #include #include #include #include #include #include #include #include #include ...
  • xiang_6
  • xiang_6
  • 2017-08-29 22:19:01
  • 96

uva 1203 - Argus(优先队列)

题目链接:uva 1203 - Argus 题目大意:一个成为Argus的系统,支持一个Register命令 Register Q_num Period 该命令为一个祖册出发...
  • u011328934
  • u011328934
  • 2014-08-23 13:39:58
  • 915

UVA 1203 Argus【优先队列】

题目链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&probl...
  • u014427196
  • u014427196
  • 2015-08-17 19:39:25
  • 541

UVA 1203 - Argus(优先队列)

UVA 1203 - Argus 题目链接 题意:给定一些注册命令,表示每隔时间t,执行一次编号num的指令,注册命令结束后,给定k,输出前k个执行顺序 思路:用优先队列去搞,任务时...
  • u011217342
  • u011217342
  • 2014-07-25 16:23:26
  • 851

I - Argus UVA - 1203 --优先队列

题意:   输入 Register   y年份  f类似频率(每f返回一次) 输入#结束输入,再输入一个数字n最后输出n行,代表返回的年份次序。 唉~~死在格式上!!!!! AC代码: #includ...
  • labixiaoxinliuxinmei
  • labixiaoxinliuxinmei
  • 2017-08-25 21:07:26
  • 40

Argus UVA - 1203(排序 优先队列)

题目链接:https://vjudge.net/problem/UVA-1203 题意:给定若干行信息,每行包含字符串s,整数ID-number,整数period,代表s在ID-number时刻产生...
  • smwqd_yehua_cx
  • smwqd_yehua_cx
  • 2017-08-29 09:15:51
  • 98

1203 - Argus(优先队列)

很简单,用优先队列维护即可。  注意在优先队列中优先级高的先出队,所以定义小于运算符的时候和排序相反。 细节参见代码: #include using namespace std; typedef ...
  • weizhuwyzc000
  • weizhuwyzc000
  • 2015-09-19 21:57:00
  • 446

uva 1203 - Argus (数据结构:优先队列+水题)

优先队列的水题,小的xiansh
  • u011639256
  • u011639256
  • 2014-07-16 11:31:47
  • 406
收藏助手
不良信息举报
您举报文章:UVA 1203 Argus(优先队列)
举报原因:
原因补充:

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