CCF 201709-2 公共钥匙盒

#include <iostream>
#include <algorithm>
//#define debug
using namespace std;

class Node{
    public:
    int start;
    int flag;
    int key;

    bool operator <(Node & node)const{
       /* if(start == node.start){
            if(flag == node.flag){
                return key < node.key;
            }else{
                if(flag == 0){
                    return true;
                }else{
                return false;
                }
            }
        }
        return start < node.start;*/
        return start == node.start  ? key < node.key : start < node.start;
    }
}node[1000 * 2];

int key[1001];

int main(){

    int n,k,i,j,tmp,w,s,c,t;
    cin >> n >> k;

    for(i = 1;i <= n;i++)
        key[i] = i;
    for(i = 0;i < k;i++){
        cin >> w >> s >> c;
        node[2 * i].flag = 0;
        node[2 *i].key = w;
        node[2 *i].start = s;

        node[2 *i + 1].flag = 1;
        node[2 *i + 1].key = w;
        node[2 *i + 1].start = s + c;
    }
    sort(node,node + 2 * k);
#ifdef debug
    for(i = 0;i < 2 * k;i++){
            cout << node[i].flag << " " << node[i].key<< " " << node[i].start<< " " << endl;
    }
    while(1);
#endif // debug
    for(i = 0;i < 2 * k;){//自己写的40分是因为这里写错,没有考虑“同时间有借有还
    //时,先处理还的
       for(j = i;j < 2 * k && node[j].start == node[i].start;j++)
        ;
       for(t = i;t < j;t++){
        if(node[t].flag == 1){
            int pos;
            for(pos = 1;pos <= n && key[pos] != -1;pos++)
                ;
            key[pos] = node[t].key;
        }
       }

        for(t = i;t < j;t++){
        if(node[t].flag == 0){
            int pos;
            for(pos = 1;pos <= n && key[pos] != node[t].key;pos++)
                ;
            key[pos] = -1;
        }
       }
        i = j;
    }

    for(i = 1;i <= n;i++ ){
            if(i != 1)
            cout << " ";
        cout << key[i];
    }
    cout << endl;

  return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值