思路
设置结构体key来存储借还的具体信息
使用vector<key>来存储借还信息
使用pos和index数组来分别记录位置上放了什么钥匙,钥匙的位置信息
具体实现
#include <bits/stdc++.h>
using namespace std;
struct key{
int n;//记录几号教室
int t;//记录动作发生的时间
bool flag ;//true表示借钥匙,false表示还钥匙
key(int nn,int tt,bool f):n(nn),t(tt),flag(f){}
bool operator < (const key &k ) const{
if(this->t!=k.t){ //比较时间
return this->t < k.t;
}else{
if(!this->flag&&!k.flag){ //如果都还钥匙,比较编号
return this->n < k.n;
}
if(!this->flag){ //还书优先
return !this->flag;
}else if(!k.flag)
return k.flag;
}
return true;// 都借书就无所谓
}
};
int n,k;
vector<key> keys;// 记录借还记录
int pos[1005],index[1005]; //位置上放了什么钥匙,钥匙的位置信息
int main(){
scanf("%d%d",&n,&k);
int tn,tt,last;
while(k--){
scanf("%d%d%d",&tn,&tt,&last);
keys.push_back(key(tn,tt,true));
keys.push_back(key(tn,tt+last,false));
}
sort(keys.begin(),keys.end());
for(int i = 1;i<=1000;i++){
pos[i] = i;
index[i] = i;
}
for(int i = 0;i<keys.size();i++){
key tk = keys[i];
if(tk.flag){ // 借钥匙
tn = tk.n;
int t_index = index[tn];//钥匙现在的位置
index[tn] = 0;//钥匙被拿走了
pos[t_index] = 0;
}else{
tn = tk.n;
int j;
for(j=1;j<1001;j++){// 找到一个空位子
if(pos[j]==0)
break;
}
pos[j] = tn; //将钥匙放到对应的位置上
index[tn] = j;
}
}
for(int i = 1;i< n;i++)//输出结果
printf("%d ",pos[i]);
printf("%d",pos[n]);
return 0;}