题目大意:有很多的询问,至于问什么就不用纠结了,需要的只是每个询问的 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;
}