这个题有多种做法 我写的是时间轴模拟
i从0时刻开始循环
首先建立一个缓存区域 用来存放已经到达 但是由于窗口全被占用而被迫排队顾客
对于每一个时刻 遍历每一个窗口 对于被占用的窗口 该窗口的剩余处理时间减一
如果存在窗口空闲(即该窗口的剩余处理时间为0) 并且缓存区域中存在顾客 那么开始操作
- 先讨论vip窗口 如果vip窗口为空 并且缓存区域中存在vip客户 那么把缓存区域中的第一个vip客户拿出来放在vip窗口上
- 如果vip窗口被占用 或者缓存区域中没有vip客户 那么我们将m个客户进行按照顺序进行窗口分配 m的值为min(空闲窗口的数量,缓存区中客户的数量)
否则不操作 让i继续++
直到队列中的所有客户被分配完并且每个窗口的剩余处理时间均为0 跳出循环
#include<iostream>
#include<queue>
#include<algorithm>
#include<stdio.h>
//平均等待时间、最长等待时间、最后完成时间,并且统计每个窗口服务了多少名顾客
using namespace std;
double ave_time;
double lgt_time;
int last_time;
double person_num[12];
double cost_time[12];
struct person
{
double arrive;
double cost;
int vip;
person():arrive(0),cost(0),vip(0) {
}
person operator=(const person& a)
{
arrive=a.arrive;
cost=a.cost;
vip=a.vip;
return *this;
}
};
int main()
{
int n;
int k,v