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


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

HDU 1203解题报告

I NEED A OFFER! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)...
  • u012294939
  • u012294939
  • 2014年09月29日 22:30
  • 496

1203: 逆序数 ( 归并排序 )

1203: 逆序数 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 125 Solved: 26 [Submit][Status][Web Board] ...
  • u013167299
  • u013167299
  • 2015年04月12日 21:10
  • 365

微信一键关注步骤

 第一步:    get请求 url       https://login.weixin.qq.com/jslogin?appid=wx782c26e4c19acffb  &re...
  • Yahuvi
  • Yahuvi
  • 2014年11月20日 10:22
  • 5703

UVA-815 flooded!(白书说能锻炼思维的题)

题意挺长的,而且是英文的,我这里就简述一下吧,就是有m*n个格子,每个格子都是10*10的规格(高度是无限的),给出每个格子的海拔,然后给出一个洪水的量,输出最后水深度和完全被水覆盖的面积百分比。这个...
  • FishSeeker
  • FishSeeker
  • 2016年04月08日 09:36
  • 956

习题4-8 特别困的学生 UVa12108

#define _CRT_SECURE_NO_WARNINGS #include #include #include #include #include #define N 1000000 int n...
  • u014800748
  • u014800748
  • 2014年08月06日 21:35
  • 1874

UVA 1658 - Admiral (拆点+最小费用流)

该题中的拆点法是解决几点容量的通用方法 。  因为只有容量限制的话仍然不能满足每个结点只访问一次这个限制 ,原因很简单,大家画个图就知道了,假设从起点有两条路到同一个结点2,然后又都到末点n,虽然它们...
  • weizhuwyzc000
  • weizhuwyzc000
  • 2015年08月21日 20:53
  • 1094

PHP微信网页版功能分析

PHP微信网页版功能分析提供微信网页版接口分析: 首先说明一点:微信目前分为2个版本,所以在获取接口时候请求的路径也不一样,很早以前注册的用户请求地址一般为wx.qq.com,新注册用户为wx2.qq...
  • qq_27263649
  • qq_27263649
  • 2016年09月29日 13:40
  • 2153

uva 12174 - Shuffle(预处理+暴力)

题目链接:uva 12174 - Shuffle 题目大意:有一个播放器用于播放音乐,现在给出s(已有曲目的数量),n给出记录的长度。播放器有随机播放的功能,每次生成一个1~s的随机系列进行...
  • u011328934
  • u011328934
  • 2014年02月16日 19:05
  • 1497

Rails(UVa514)(栈)

Rails  There is a famous railway station in PopPush City. Country there is incredibly hilly. Th...
  • hdd871532887
  • hdd871532887
  • 2015年12月21日 07:13
  • 652

hdu 1203(完全背包)

Problem Description Speakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了。要申请国外的任何大学,你都要交纳一定的申请费...
  • martinue
  • martinue
  • 2015年05月11日 23:29
  • 657
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UVA 1203 Argus(优先队列)
举报原因:
原因补充:

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