CCF/CSP 201709-2 公共钥匙盒 代码
c++代码注释版
#include<iostream>
#include<algorithm>
using namespace std;
int key[1001];
struct OP{
int time;
int keyid;
int even;
}op[100001];
bool cmp(OP op1, OP op2) {
if (op1.time == op2.time) {
if (op1.even == op2.even) {
return op1.keyid < op2.keyid;
} else {
return op1.even > op2.even;
}
}
else {
return op1.time < op2.time;
}
}
int main() {
int n, k;
cin >> n >> k;
for (int i = 0 ; i < n; i++) {
key[i] = i+1;
}
int opindex = 0;
for (int j = 0; j < k; ++j) {
int keyid, startTime,useTime,endTime;
cin >> keyid >> startTime >> useTime;
endTime = startTime + useTime;
op[opindex].time = startTime;
op[opindex].keyid = keyid;
op[opindex].even = 1;
opindex++;
op[opindex].time = endTime;
op[opindex].keyid = keyid;
op[opindex].even = 2;
opindex++;
}
sort(op,op+opindex,cmp);
for(int i = 0; i < opindex; ++i){
int keyid = op[i].keyid;
if (op[i].even == 1) {
for(int j = 0; j < n; ++j) {
if (key[j] == keyid) {
key[j] = -1;
break;
}
}
}
else {
for(int j = 0; j < n; ++j) {
if(key[j] == -1) {
key[j] = keyid;
break;
}
}
}
}
for (int i = 0; i < n; ++i) {
cout << key[i] << " ";
}
return 0;
}