poj 2051 Argus(优先队列)

来源:互联网 发布:数码宝贝2知乎 编辑:程序博客网 时间:2024/05/21 15:16

题目链接:http://poj.org/problem?id=2051

思路:就是把此次出队列的数据的出现的时间值加上它的周期,得到下次出现的时间,然后按这个时间的数据值加入到优先队列中。

//2014-7-6#include<cstdio>#include<iostream>#include<queue>using namespace std;struct Node{    int num,per,sum;    bool operator<(const Node& a) const    {        return sum>a.sum||(sum==a.sum&&num>a.num);    }};int main(){    int k;    char str[100];    priority_queue<Node> Q;    while(~scanf("%s",str))    {        while(str[0]!='#')        {            Node P;            scanf("%d%d",&P.num,&P.per);            P.sum=P.per;                    //计算ID号为num的数出第一次出现的时间            Q.push(P);            scanf("%s",str);        }        Node P;        scanf("%d",&k);        while(k--)        {            Node P=Q.top();                    //找出最近出现的数            Q.pop();            P.sum+=P.per;                   //计算出队首(即此次出现的)ID号为num下次出现的时间并把它放入到队列中            printf("%d\n",P.num);            Q.push(P);        }    }    return 0;}

0 0
原创粉丝点击