题目链接:
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3644
题意:
给定一些注册命令,表示每隔时间t,执行一次编号num的指令,注册命令结束后,给定k,输出前k个执行顺序
代码:
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
#include <queue>
#include <stack>
#include <map>
using namespace std;
char s[100];
struct node
{
int num;
int tm, per;
friend bool operator < (node a, node b)
{
return a.tm > b.tm || (a.tm == b.tm && a.num > b.num);
}
};
int main()
{
int a, b;
priority_queue<node> q;
while (scanf("%s",s) && s[0] != '#')
{
scanf("%d%d",&a,&b);
node tmp;
tmp.num = a; tmp.per = b; tmp.tm = b;
q.push(tmp);
}
int k;
scanf("%d", &k);
while (k--)
{
if (!q.empty())
{
node tmp;
tmp = q.top(); q.pop();
printf("%d\n",tmp.num);
tmp.tm += tmp.per;
q.push(tmp);
}
}
return 0;
}