優先隊列 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;
}


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