题目链接
题目大意
银行有 N 个窗口,窗口前有一条黄线。并且有以下规则
- 黄线前每个窗口足够容纳 M 名顾客,因此若 N 个队伍都满了,则其余的乘客需要站在黄线外面等候
- 每名顾客都会选择最短的一队进入黄线区域(黄线内队伍中有顾客办理完成手续了),如果有两队人数一样,则从窗口号较小的队伍插入。
- 每名顾客都有自己办理业务的时间
- 业务办理从 8:00 开始,到 17:00 结束。
思路
两种情况:
- 黄线内的容量大于来办理业务的顾客。
将黄线内的顾客办理业务的时间存起来,因为头一批到达黄线内的顾客按照从左到右的顺序进入队伍就好。因此计算出各自的时间即可。
2.黄线内的容量小于来办理业务的顾客。
将黄线内的顾客办理业务的时间存起来,并计算出每个窗口在黄线内顾客办理完业务后的时间,用于计算后面的顾客办理业务的时间。然后找出每个窗口队伍第一个人办理业务最短的时间,弹出这个元素,并计算当前最短的队伍,然后将 在黄线后面等待的顾客 插入到这个队伍中,并计算对应的时间即可。
坑点
- 要考虑黄线容纳顾客的情况,可能可以完全容纳,也可能容纳不下
- 考虑 17:00 这个时间点。原题中的描述:
Note that since the bank is closed everyday after 17:00, for those customers who cannot be served before 17:00, you must output Sorry instead.
注意由于银行每天 17:00 之后下班,因此那些在 17:00 之前没有被服务到的顾客,你需要输出 Sorry。
- 注意处理 M 为 0 的情况
实现
#include
#include
#include
#include