不到60行,算是看到的里面最短的了
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct teacher{
int key;
int start;
int end;
};
int main(){
int n,k;cin>>n>>k;
int arr[n];
for(int i=0;i<n;i++)arr[i]=i+1;
teacher te[k];
int max=0;
for(int i=0;i<k;i++){//存入教师信息
cin>>te[i].key>>te[i].start>>te[i].end;
te[i].end=te[i].start+te[i].end;
if(te[i].end>max)max=te[i].end;
}
for(int i=1;i<max+1;i++){//当前时刻
vector<int> jie;
vector<int> huan;
for(int j=0;j<k;j++){//创建借还vector
if(te[j].start==i)jie.push_back(te[j].key);//存此时要借的key
if(te[j].end==i)huan.push_back(te[j].key);//存此时要还的key
}
if(huan.size()!=0){//还完再借
sort(huan.begin(),huan.end());//按顺序还
for(int t=0;t<huan.size();t++){//遍历还的vector
for(int m=0;m<n;m++){//遍历arr找空
if(arr[m]==0){
arr[m]=huan[t];//huan[t]是要还的key对应arr第一个空
break;//跳出内层循环
}
}
}
}
if(jie.size()!=0){//多个人借
for(int t=0;t<jie.size();t++)//从小到大遍历借vector
{
for(int m=0;m<n;m++){//每一个jie的元素,和借一个钥匙的过程一样
if(arr[m]==jie[t])//要先找到钥匙的位置
{
arr[m]=0;break;
}
}
}
}
}
cout<<arr[0];//输出结果
for(int i=1;i<n;i++){
cout<<" "<<arr[i];
}
return 0;
}
被坑了一个小时差不多,发现两处错误
程序一直跳不出来,调试打印发现是死循环
1.检查发现多层循环有一个t++顺手写了个i++, 改完只有40分
2.第二处是还的时候从小到大还,借的时候肯定没有顺序,写成借的时候从小到大了。。。。
在纸上写测试例的时候想到的
一定要先把思路理清,再写,刚开始自己做的笔记是对的,所以写完要认真对应检查
没想好不要写