1. 程式人生 > >201709-2 公共鑰匙盒 解題報告

201709-2 公共鑰匙盒 解題報告

#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; }