题目: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\n",a.qnum);
a.time += a.period;
q.push(a);
}
return 0;
}