201709-2 公共鑰匙盒 解題報告
阿新 • • 發佈:2019-02-06
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
vector<int>in,out;//in為儲存還鑰匙的編號的容器,out為儲存借鑰匙的編號的容器
int n,m;
int a[10000];
struct key
{
int w,s,c,e;//w為鑰匙編號,s為上課起始時間,c為上課時長,e為上課結束時間
}key[10000];
void find_return(int t)//查詢t時刻是否有人還鑰匙,
{
for(int i=0;i<m;i++)
{
if (key[i].e==t)
{
in.push_back(key[i].w);//
}
}
}
void find_borrow(int t)//查詢t時刻是否有人借鑰匙,
{
for(int i=0;i<m;i++)
{
if(key[i].s==t)
{
out.push_back(key[i].w);
}
}
}
int main()
{
//freopen("in.txt","r",stdin);
cin>>n>>m;
for (int i=1;i<=n;i++) a[i]=i;//資料初始化
for(int i=0;i<m;i++)
{
cin>>key[i].w>>key[i].s>>key[i].c;
key[i].e=key[i].s+key[i].c;
}
int maxtime=-1000000;//找出最晚下課的時間
for(int i=0;i<m;i++)
{
if(key[i].e>maxtime) maxtime=key[i].e;
}
for (int i=1;i<=maxtime;i++)
{
find_return(i);
find_borrow(i);
if(in.size())
{
sort(in.begin(),in.end());
for(int j=0;j<in.size();j++)
{
for(int cnt=1;cnt<=n;cnt++)
{
if(!a[cnt])
{
a[cnt]=in[j];
break;
}
}
}
}
if(out.size())
{
sort(out.begin(),out.end());
for(int j=0;j<out.size();j++)
{
for(int cnt=1;cnt<=n;cnt++)
{
if(a[cnt]==out[j])
{
a[cnt]=0;
break;
}
}
}
}
//查詢完及時清理容器
out.clear();
in.clear();
}
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
cout<<endl;
}