一点心得:在写程序的时候没有考虑到全部的情况,导致测试的时候一直是40分。写代码的时候一定要考虑周全!!!!!!!
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct Return{
int w;//一位老师要使用的钥匙编号
int s;//开始上课的时间
int r;//归还钥匙的时间
};
int a[1024];
vector<Return> te;
vector<int> back;//用于保存所有需要归还的钥匙的编号
int main()
{
int n, k;
cin >> n >> k;
te.clear();
for(int i=0; i<k; i++){
int a, b, c;
cin >> a >> b >> c;
Return record;
record.w=a;record.s=b;record.r=b+c;
te.push_back(record);
}
// cout << "输入完毕" << endl;
//初始化钥匙的位置,0表示该位置为空
// int a[n];
for(int i=1; i<=n; i++){
a[i]=i;
}
vector<Return>::size_type rnum=0;//还钥匙的老师的个数
for(int i=1; ;i++){
// cout << "开始判断";
back.clear();
// cout << back.size();
//先判断在该时刻是否有归还的钥匙
for(vector<Return>::size_type j=0; j!=te.size();j++){
if(te[j].r==i){
// cout << "归还" <<endl;
back.push_back(te[j].w);
}
}
sort(back.begin(), back.end());
//将需要归还的钥匙从小到大一次放入空的钥匙盒
for(vector<int>::size_type j=0; j!=back.size(); j++){
for(int m=1; m<n+1; m++){
if(a[m]==0){
a[m]=back[j];
rnum++;//还钥匙的老师个数加1
break;
}
}
}
//再判断老师需要取的钥匙
for(vector<Return>::size_type j=0; j!=te.size(); j++){
if(te[j].s==i){
for(int m=1; m<n+1; m++){
if(a[m]==te[j].w){
// cout << "取出钥匙" << endl;
a[m]=0;//取出该钥匙
break;
}
}
}
}
// cout << "bnum is: " << bnum <<endl;
if(rnum==te.size()) break;
}
for(int i=1; i<=n; i++)
cout << a[i] << " ";
return 0;
}