題目大意:給出一個數字,和 他每間隔多少秒就會出現,輸出前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;
}