题意很好理解,使用的数据结构就是优先队列了。不断模拟并维护小根堆即可。不过C++有STL,本着能不重复造轮子就不造轮子的原则,我果断的选择了STL。
代码如下:
#include <cstdio>
#include <queue>
#include <cmath>
using namespace std;
struct node{
int qnum,period,Time;
bool operator <(const node & x)const{
return Time>x.Time || (Time==x.Time && qnum>x.qnum);
}
};
const int maxn = 10;
char s[maxn];
int x,y,n;
priority_queue<node>que;
node p;
void init(){
while (!que.empty()) que.pop();
while (scanf("%s",s)!=EOF){
if (s[0]=='#') break;
scanf("%d %d",&x,&y);
p.qnum = x; p.period = y; p.Time = y;
que.push(p);
}
scanf("%d",&n);
}
void Print(){
for (int i=0; i<n; i++) {
p = que.top();
que.pop();
printf("%d\n",p.qnum);
p.Time += p.period;
que.push(p);
}
}
int main(){
init();
Print();
return 0;
}