LA 3135 优先队列

题目大意:有若干命令,它有两个属性Q_Num,Period(周期)。按时间循序模拟前k个命令并输出他们的Q_Num,若同时发生输出Q_Num最小的值。

 

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;

struct Item
{
    int QNum,Period,Time;
    bool operator < (const Item &a)const{
        return a.Time < Time || (a.Time == Time && a.QNum < QNum);
    }
}item;

int main()
{
    char s[10];
    int k;
    priority_queue<Item> pq;
    while(scanf("%s",s) && s[0] != '#')
    {
        scanf("%d %d",&item.QNum,&item.Period);
        item.Time=item.Period;
        pq.push(item);
    }
    scanf("%d",&k);
    while(k--)
    {
        item=pq.top();
        pq.pop();
        printf("%d\n",item.QNum);
        item.Time+=item.Period;
        pq.push(item);
    }
    return 0;
}

 

 

 

posted on 2014-01-27 11:54  雄..  阅读(238)  评论(0编辑  收藏  举报

导航