题目大意:给出一个数字,和 他每间隔多少秒就会出现,输出前k个出现的数。
分析:加入优先队列,每次取出堆顶元素输出,加上间隔时间后,再加入优先队列。
题目本身不难,但是涉及 重载函数,好好学习!
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
using namespace std;
struct Node{
int num,t,pre;
Node(int nn,int tt,int pp): num(nn),t(tt),pre(pp){
}
};
bool operator < (const Node &a, const Node &b){
if (a.pre!=b.pre) return a.pre>b.pre;
else return a.num>b.num;
}
priority_queue<Node> myque;
char ch[20];
int main(){
int a,b;
while (!myque.empty()) myque.pop();
scanf("%s",ch);
while (strcmp(ch,"#")!=0){
scanf("%d%d",&a,&b);
myque.push(Node(a,b,b));
scanf("%s",ch);
}
int n;
scanf("%d",&n);
for (int i=1;i<=n;i++){
Node tmp=myque.top();
myque.pop();
myque.push(Node(tmp.num,tmp.t,tmp.pre+tmp.t));
printf("%d\n",tmp.num);
}
return 0;
}