LA 3135

925 ワード

タイトル:http://acm.hust.edu.cn:8080/judge/problem/viewProblem.action?id=18684
 
優先行列時間によって小さい時から列を大きく作って、時間は同じにID(num)を押して小さい時から大きい時まで。出力のある数を同時にして、今度は彼のtimeを増加します。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
using namespace std;

struct item{
	int qnum,time,period;
	bool operator < (const item &u)const{
		return time > u.time || (u.time == time && qnum > u.qnum);
	}
};
priority_queue<item> q;

int main()
{
	char s[100];
	int num,period;
	while(scanf("%s",&s) && s[0] != '#'){
		item a;
		scanf("%d%d",&num,&period);
		a.qnum = num;
		a.time = period;
		a.period = period;
		q.push(a);
	}
	int k;
	scanf("%d",&k);
	while(k--){
		item a = q.top();q.pop();
		printf("%d
",a.qnum); a.time += a.period; q.push(a); } return 0; }