LA 3135 Argus (2004北京 模拟系统调度 优先队列实现)

题目还是蛮简单的 应该是当年北京站的水题吧
就是说给出一堆任务 每个任务有 qnum 和 time
qnum表示优先级 越小优先级越大
time表示循环时间 就是每隔time时间 这个任务就得再进队列一次
优先级首先是时间 其次是qnum 
这样重要的就是struct里 重载的 小于号了
最大的先出队列
这里就是时间最小的先出队列
如果时间相等的话 qnum小的先出
每次出队列后time+=T
重新进队列 这样就模拟好了。。

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

struct Node
{
    int qnum;
    int time;
    int t;
    bool operator < (const Node & n)const
    {
        return (time>n.time || (time==n.time && qnum>n.qnum));
    }
};

int main()
{
    char str[20];
    priority_queue<Node> pq;
    int a,b,i,k;
    Node node;
    while(scanf("%s",str) && str[0]!='#')
    {
        scanf("%d %d",&node.qnum,&node.t);
        node.time=node.t;
        pq.push(node);
    }
    scanf("%d",&k);
    while(k--)
    {
        node=pq.top();
        pq.pop();
        printf("%d\n",node.qnum);
        node.time+=node.t;
        pq.push(node);
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值