问题描述:给定每个顾客的到达时间和处理时间,求平均等待时间。
解题思路:事件更新:储存每个窗口可以服务的时间,求所有窗口中最早完成可以服务的窗口k,则下一个到达的人应该在k窗口服务。比较是否需要等待即可。 可以与比较一下。本次只选择最早完成的窗口。而1014需要排队。
AC代码:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
#define opt 8*60*60
#define clt 17*60*60
typedef struct cus{
int arr,pro;
cus(int a,int p):arr(a),pro(p){}
}cus;
vector<int>window;
vector<cus>customer;
bool cmp(cus &a,cus &b){return a.arr<b.arr;}
int update(cus &a)//更新,求每个窗口最小完成时间,然后更新该窗口的完成时间,并返回等待时间。
{
int m=window[0],k=0,t=0;
for(int i=1;i<window.size();++i){
if(window[i]<m)m=window[i],k=i;
}
if(a.arr<window[k]){
t=window[k]-a.arr;
window[k]+=a.pro;
}else{
window[k]=a.a