ZOJ 3230 Solving the Problems

来源:互联网 发布:围棋软件形势判断 编辑:程序博客网 时间:2024/04/30 11:45

优先队列。

按a和b为关键字分别建立优先队列即可。

#include <cstdio>#include <cstring>#include <queue>using namespace std;struct node1 {    int a, b;    node1() {}    node1(int _a, int _b): a(_a), b(_b) {}    bool operator < (const node1 & x) const {        return a > x.a;    }};struct node2 {    int a, b;    node2() {}    node2(int _a, int _b): a(_a), b(_b) {}    bool operator < (const node2 & x) const {        return b < x.b;    }};int n, m, p;int main() {    while (scanf("%d%d%d", &n, &m, &p) == 3) {        priority_queue<node1> q1;        priority_queue<node2> q2;        int a, b;        for (int i=0; i<n; i++) {            scanf("%d%d", &a, &b);            q1.push(node1(a, b));        }        while (m--) {            while (!q1.empty() && q1.top().a <= p) {                q2.push(node2(q1.top().a, q1.top().b));                q1.pop();            }            if (q2.empty()) break;            p += q2.top().b;            q2.pop();        }        printf("%d\n", p);    }    return 0;}


原创粉丝点击