解题思路:
基本原理为一队多窗口问题,利用模拟队列进行操作
step:
①通过每个人来到的时间与窗口结束上一个工作的时间的关系来进行插入预备队列:
每次插入一个人,进行一次预备队列的刷新,即获得结束时间最小的窗口的时间,将所有输入中由头至尾将客户的到达时间小于该结束时间的客户进行入队(预备队列即排队)
②对预备队列进行操作:
1.若队列中有VIP且此时VIP窗口结束则将VIP客户安排到VIP窗口
2.获得最早结束的窗口时间,若该时间与VIP窗口同时结束,且队伍中有VIP客户,则先将VIP客户安排到VIP窗口,再安排从预备队列的头部进行安排
3.若预备队列为空,且工作未结束表明,下一个客户来到时候可以直接安排到窗口无需等待,此时只需判断此客户是否为VIP和VIP窗口是否为空即可.
4.若获得的最早结束的窗口不是VIP窗口且VIP窗口结束时间不等于最早结束窗口,则进行正常的按规则安排,特别注意无论此时队首是不是VIP此时都对窗口安排无关,但需在编程时注意VIP的操作控制.
代码实现:
#include<iostrea