PAT-A-1017 Queueing at Bank (25 分) 优先级队列模拟 C++题解

该博客介绍了PAT-A-1017题目,即银行排队问题的解决策略,重点在于使用优先级队列进行模拟。内容包括题目描述、解题思路及AC代码。通过定义结构体存储客户信息,并利用优先级队列处理服务顺序,以计算平均等待时间。
摘要由CSDN通过智能技术生成

1017 Queueing at Bank (25 分)

题目传送门:1017 Queueing at Bank (25 分)

一、题目大意

n个人,k个窗口,求平均每个人等待的时间。超过17:00到达的人不会被服务,也就是不算入平均时间。8:00开门,来早的人要等到8:00才会得到服务。

二、解题思路

定义一个结构体存储每个人来到银行的时间、开始被服务的时间、结束被服务的时间。定义一个优先级队列,先把前k个人塞入队列里。剩下的人,每当有人要入队,就必须有人要出队。所以选择结束时间最早的人出队来让后面的人入队。因此自定义的结构体中要实现比较规则小于号,让后结束的人排在前面,优先级队列默认是大顶堆,优先弹出先结束的人。(我就是结构体的比较规则写成了开始时间比较以至于样例一直不过,改过来后果然一遍AC了,思路没问题)

计算公式:等待时间 = 开始服务时间 - 来到银行的时间

注意:没到8:00就来的前k个人也被算入等待时间,要参与平均时间的计算。

小技巧:对时间的加减处理,建议一开始就转化为时间戳来操作,要不然过程中拿着时间字符串来操作太繁琐。

三、AC代码

#include<bits/stdc++.h>
using namespace std;
template<typename T = int>
T read(){
   
	T x;
	cin >> x;
	return x;
}
struct ZJ{
   
	int time;// 到达银行的时间
	int len; // 服务的时间长度
	int start, end; // 开始被服务的时间、结束被服务的时间。
	bool operator<(const ZJ&that)const {
   
		return end > that.end;// 自定义排序规则,为大顶堆优先级队列提供比较规则。
	}
};
int parseInt(string s){
   // 字符串时间转整数时间戳
	
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值