题目还是蛮简单的 应该是当年北京站的水题吧
就是说给出一堆任务 每个任务有 qnum 和 time
qnum表示优先级 越小优先级越大
time表示循环时间 就是每隔time时间 这个任务就得再进队列一次
优先级首先是时间 其次是qnum
这样重要的就是struct里 重载的 小于号了
最大的先出队列
这里就是时间最小的先出队列
如果时间相等的话 qnum小的先出
每次出队列后time+=T
重新进队列 这样就模拟好了。。
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
struct Node
{
int qnum;
int time;
int t;
bool operator < (const Node & n)const
{
return (time>n.time || (time==n.time && qnum>n.qnum));
}
};
int main()
{
char str[20];
priority_queue<Node> pq;
int a,b,i,k;
Node node;
while(scanf("%s",str) && str[0]!='#')
{
scanf("%d %d",&node.qnum,&node.t);
node.time=node.t;
pq.push(node);
}
scanf("%d",&k);
while(k--)
{
node=pq.top();
pq.pop();
printf("%d\n",node.qnum);
node.time+=node.t;
pq.push(node);
}
return 0;
}