利用优先队列做。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <queue>
using namespace std;
typedef struct
{
int num;
int time;
int intv;
}web;
struct cmp
{
bool operator()(web a,web b)
{
if(a.time == b.time)
return a.num > b.num;
return a.time > b.time;
}
};
char ch[10];
int main()
{
priority_queue<web, vector<web>, cmp> q;
web q1, q2;
int num;
int intv;
int nn;
for(;;)
{
scanf("%s", ch);
if(ch[0]=='#')
break;
scanf("%d%d",&num, &intv);
q1.num = num;
q1.intv = intv;
q1.time = intv;
q.push(q1);
}
scanf("%d", &nn);
while(nn--)
{
q2 = q.top();
printf("%d\n",q2.num);
q2.time += q2.intv;
q.pop();
q.push(q2);
}
return 0;
}