其他分享
首页 > 其他分享> > CCF 201709-2 公共钥匙盒

CCF 201709-2 公共钥匙盒

作者:互联网

这道题开始是没思路的,看了一下题解。说是把时间抽象成时间点(主要思想)。

让计算机计算的是某个时刻发生的事情,不需要管一段时间发生了什么。这样也不好思考

自己写了,没过。感觉写的太乱。于是还是在网上找了一篇,说到了优先队列

关键点:优先队列  模拟

优先队列的英文:priority_queue

优先队列的方法:

 

注意:重载方法中的

friend bool operator < (node a, node b) {
        if(a.time != b.time) {
            return a.time > b.time;
        } else if(a.op != b.op) {
            return a.op < b.op;
        } else {
            return a.id > b.id;
        }
    }

 

//只有<重载操作符函数时,如果将<改为>为什么不行,出现error C2784的错误
    friend bool operator <(Node node1,Node node2)
    {
        //<为从大到小排列,>为从小到大排列
        return node1.key<node2.key;
    }
    friend bool operator >(Node node1,Node node2)
    {
        return node1.key<node2.key;
    }

 完整代码:

#include<iostream>
#include<queue>
using namespace std;
struct node {
    int id;
    int time;
    char op;
    friend bool operator < (node a, node b) {
        if(a.time != b.time) {
            return a.time > b.time;
        } else if(a.op != b.op) {
            return a.op < b.op;
        } else {
            return a.id > b.id;
        }
    }
};
int main() {
    int a[10004];
    node t;
    priority_queue<node> q;
    int n,k;
    cin >> n >> k;
    for(int i=1 ; i <= n ; i++) {
        a[i] = i;
    }
    int w,s,c;
    for(int i = 1 ; i <= k ; i++) {
        cin >> w >> s >> c;
        t.id = w;
        t.time = s;
        t.op = 'G';
        q.push(t);
        t.time = s + c;
        t.op = 'R';
        q.push(t);
    }
    while(!q.empty()) {
        t = q.top();
        q.pop();
        if(t.op == 'G') {
            for(int i = 1 ; i <= n; i++) {
                if(a[i] == t.id) {
                    a[i] = 0;
                    break; 
                }
            }
        } else {
            for(int i = 1 ; i <= n; i++) {
                if(a[i] == 0) {
                    a[i] = t.id;
                    break;
                }
            }
        }
    }
    for(int i=1; i<=n; i++) {
        if(i!=1)
            cout<<" ";
        cout<<a[i];
    }
}

 

标签:node,201709,return,int,钥匙,time,CCF,id,op
来源: https://www.cnblogs.com/LikeFish/p/16216489.html