fzu 1182 Argus 优先队列

#include<stdio.h>
#include<string.h>
#include<queue>
#include<algorithm>
using namespace std;
struct node
{
    int num;
    int t;
    int now;
    friend bool operator < (node n1,node n2)
    {
        if(n1.now==n2.now) return n2.num<n1.num;
        return n2.now<n1.now;
    }

}tp;

priority_queue<node>q;

int main()
{
    int cnt,i,n,top,num,t,k,amt=0;
    char s[100];
    while(!q.empty()) q.pop();
    while(~scanf("%s",s))
    {
        if(strcmp(s,"#")==0)
        {
            cnt=0;
            scanf("%d",&k);
            while(cnt<k)
            {
                tp=q.top();
                q.pop();
                t=tp.now;
                printf("%d\n",tp.num);
                cnt++;
                tp.now+=tp.t;
                q.push(tp);
                while(t==q.top().now&&cnt<k)
                {
                    tp=q.top();
                    q.pop();
                    printf("%d\n",tp.num);
                    cnt++;
                    tp.now+=tp.t;
                    q.push(tp);
                }
            }
            while(!q.empty()) q.pop();
        }
        else
        {
            scanf("%d%d",&num,&t);
            tp.num=num;
            tp.t=t;
            tp.now=t;
            q.push(tp);
        }
    }
    return 0;
}

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

时间: 2024-10-16 23:18:30

fzu 1182 Argus 优先队列的相关文章

LA-3135 - Argus(优先队列)

3135 - Argus A data stream is a real-time, continuous, ordered sequence of items. Some examples include sensordata, Internet traffic, financial tickers, on-line auctions, and transaction logs such as Web usage logsand telephone call records. Likewise

uva 1203 - Argus(优先队列)

题目链接:uva 1203 - Argus 题目大意:一个成为Argus的系统,支持一个Register命令 Register Q_num Period 该命令为一个祖册出发器,每Period产生一次Q_num的时间.要求模拟k个事件,如果多个事件同时发生,现处理Q_num小的. 解题思路:用优先队列维护即可,队列中按照时间小的优先,时间相同的比较Q_num,每次处理完一个时间,对应的将时间的时间加上period后放回队列中,表示下一次出发器生成的时间. #include <cstdio> #

UVA 1203 - Argus(优先队列)

UVA 1203 - Argus 题目链接 题意:给定一些注冊命令.表示每隔时间t,运行一次编号num的指令.注冊命令结束后.给定k.输出前k个运行顺序 思路:用优先队列去搞,任务时间作为优先级.每次一个任务出队后,在把它下次运行作为一个新任务入队就可以 代码: #include <cstdio> #include <cstring> #include <queue> using namespace std; char str[10]; struct Task { in

LA 3135 Argus (优先队列的简单应用)

A data stream is a real-time, continuous, ordered sequence of items. Some examples include sensordata, Internet traffic, nancial tickers, on-line auctions, and transaction logs such as Web usage logsand telephone call records. Likewise, queries over

poj 2051 Argus(优先队列)

题目链接: http://poj.org/problem?id=2051 思路分析: 优先级问题,使用优先队列求解:当执行某个任务后,再增加一个任务到队列中, 该任务的优先级为执行任务的时间加上其时间间隔,如此反复直到求出前K个执行任务. 代码: #include <iostream> #include <queue> using namespace std; struct Argu { int QNum; int period; int time; bool operator&l

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

UVALive - 3135 Argus Time Limit: 3000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu Submit Status Description A data stream is a real-time, continuous, ordered sequence of items. Some examples include sensor data, Internet traffic, financi

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

UVALive 3135 Argus http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18684 题意 编写一个系统执行一系列Register命令:Register Q_num Period,每个命令执行周期是Period,执行事件Q_num:如果事件同时发生,优先执行Q_num小的. 示例 Sample Input Register 2004 200 Register 2005 300 # 5 Sample Output

LA 3135 (优先队列) Argus

将多个有序表合并成一个有序表就是多路归并问题,可用优先队列来解决. 1 #include <cstdio> 2 #include <queue> 3 using namespace std; 4 5 const int maxn = 1000 + 10; 6 7 struct Node 8 { 9 int time, period, num; 10 bool operator < (const Node& rhs) const 11 { 12 return time

POJ 2051 argus(简单题,堆排序or优先队列)

又是一道数据结构题,使用堆来进行权值调整和排序,每次调整都是o(n)的复杂度,非常高效. 第一眼看题觉得可以用优先队列来做,应该也很简单. 事实上多数优先队列都是通过堆来实现的. 写的时候还是出了一些问题: 1.二叉树根节点下标显然不能为0: 2.限界之后若出现扩界要小心: 3.在迭代循环比较的时候,尤其注意到底比较的是谁,别把自己绕晕了. ac代码: #include<iostream> #include<cstdio> #include<cstdlib> #incl