POJ 2051(最小堆/优先队列)

来源:互联网 发布:水产加工erp软件 编辑:程序博客网 时间:2024/05/01 11:43

听了菊苣的话入手了一本挑战程序设计竞赛,为了突破瓶颈......这道题是一道最小堆的题,为了方(水)便(题)于是就用了优先队列来做....

题意大致是每个id号注册的时候占用一定时间,然后不断的用最短的时间注册id号

中规中矩的一道题,重载一下运算符排好序就行了。

#include <iostream>#include <queue>#include <string>#include <cstring>#include <cstdio>using namespace std;struct Node{    int id;    int period;    int time;    friend bool operator < (const Node &a, const Node &b)    {        if (a.time == b.time)            return a.id > b.id;        else            return a.time > b.time;    }};int main(){    priority_queue<Node> q;    string s;    Node point;    int x, y;    cin >> s;    while (s.compare("#") != 0)    {        scanf("%d %d", &x, &y);        point.id = x;        point.period = y;        point.time = y;        q.push(point);        cin >> s;    }    int n;    scanf("%d", &n);    while (n--)    {        Node temp = q.top();        temp.time += temp.period;        printf("%d\n", temp.id);        q.pop();        q.push(temp);    }}

0 0
原创粉丝点击