POJ--2051--Argus

题目大意:有很多的询问,至于问什么就不用纠结了,需要的只是每个询问的 id和要求答案的间隔时间,也就是说,每个询问,我要每间隔per的时间就需要一个答案。

题目输入每个询问的id和要求答案的间隔时间,要求输出前K个回答的先后顺序,如果同一时间回答了两个询问,则按id排序输出。

题解:一个优先级队列即可

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<queue>
#define maxn 100
using namespace std;
class Reg
{
    public:
    int id,per;
    int tim;//输出此次答案的时间,优先级队列按照此变量确定优先级,即是时间最小的先出列
    bool operator<(const Reg & b)const
    {
        if(tim==b.tim)
        return id<b.id;
        else
        return tim<b.tim;
    }
    bool operator>(const Reg & b)const
    {
        if(tim==b.tim)
        return id>b.id;
        else
        return tim>b.tim;
    }
};
priority_queue<Reg,vector<Reg>,greater<Reg> > q;
int n,k;
char cmd[maxn];
int main()
{
    Reg temp;
    while(1)
    {
        scanf("%s",cmd);
        if(cmd[0]=='#')break;
        scanf("%d%d",&temp.id,&temp.per);
        temp.tim=temp.per;
        q.push(temp);
    }
    scanf("%d",&k);
    for(int i=0;i<k;i++)
    {
        temp=q.top();q.pop();
        printf("%d\n",temp.id);
        temp.tim+=temp.per;
        q.push(temp);
    }
    return 0;
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值