优先队列 POJ2051 Argus

题目大意:给出一个数字,和 他每间隔多少秒就会出现,输出前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;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章