1017 Queueing at Bank
题意:银行有K个窗口用于服务,给出所有人的达到时间T和服务时间P,计算所有被服务的客户的平均等待时间。任何客户的服务时间不得超过60分钟。早于08:00到的,要等到08:00;在17:00:01及之后到的,不给予服务,不参与计算平均等待时间。
思路:首先,对所有顾客的到达时间进行排序;其次,令数组windows[i]表示窗口i当前顾客的结束服务的时间,初始化为08:00,这样的话,每次要安排下一个顾客前往某窗口接受服务时,就遍历所有窗口,找出当前最快结束的那个窗口(记为minidx),然后让这位顾客去minidx号窗口接受服务。顾客的等待时间分为两种情况:
1)若顾客到达的时间比较早,早于当前窗口的最早结束的时间,如当前窗口结束前一个人的服务时间是08:16,但是下一位顾客08:01(其服务时间是60分钟)就到了,则该顾客需等待15分钟,而该窗口的最早结束服务的时间就更新为08:16+60min;
2)若顾客到达的时间比较晚,晚于当前窗口的最早结束的时间,如当前窗口结束前一个人的服务时间是08:16,但是下一位顾客08:20(其服务时间是60分钟)才到,则该顾客无需等待,相应的,该窗口的最早结束服务的时间就更新为08:20+60min,注意区别,这种情况下,时间更新为该顾客的到达时间+其服务时长!
一些注意点:
1.为了时间比较的方便,统一化成以秒为单位;
2.因为任何客户的服务时间不得超过60分钟,故在数据输入时就先做好判断,如果某个顾客服务时间超过60分钟的,直接截断成60分钟;
3.因为在17:00:01及之后到的,不给予服务,不参与计算平均等待时间,即无效数据,故在数据输入时就先剔除;
我的主要问题出在了更新状态未考虑周全,即上面所说的情况(2)。
代码:
#include <cstdio>
#include <algorithm>
using namespace std;
*;
*;
//时间均以秒为单位
struct Customer{
int arrivedTime;
int servedTime;
}cus[];
;//总的等待时间
];//表示窗口i的最早结束服务的时间,初始化为START_TIME
bool cmp(Customer a,Customer b){
return a.arrivedTime<b.arrivedTime;
}
int main()
{
//freopen("pat.txt","r",stdin);
fill(windows,windows+,START_TIME);//初始化
;
scanf("%d%d",&n,&k);
int hh,mm,ss,serve;
;i<n;i++){
scanf("%d:%d:%d%d",&hh,&mm,&ss,&serve);
+mm*+ss>END_TIME) continue;//如果到达时间超过下班时间,则无效
cus[validCnt].arrivedTime=hh*+mm*+ss;
cus[validCnt++].servedTime=(serve>?:serve)*;
}
sort(cus,cus+validCnt,cmp);
;
while(idx<validCnt){
//遍历所有窗口,寻找当前哪个窗口最先有空
,minTime=0x7fffffff;
;i<k;i++){
if(windows[i]<minTime){
minTime=windows[i];
minidx=i;
}
} //更新
if(windows[minidx]>cus[idx].arrivedTime){
totalWait+=windows[minidx]-cus[idx].arrivedTime;
windows[minidx]+=cus[idx].servedTime;
}else{
windows[minidx]=cus[idx].arrivedTime+cus[idx].servedTime;//关键,容易忽略
}
idx++;
}
printf("%.1f",totalWait/60.0/validCnt);
;
}
1017 Queueing at Bank的更多相关文章
- PAT 1017 Queueing at Bank[一般]
1017 Queueing at Bank (25)(25 分)提问 Suppose a bank has K windows open for service. There is a yellow ...
- PAT甲级1017. Queueing at Bank
PAT甲级1017. Queueing at Bank 题意: 假设一家银行有K台开放服务.窗前有一条黄线,将等候区分为两部分.所有的客户都必须在黄线后面排队,直到他/她轮到服务,并有一个可用的窗口. ...
- PAT 1017 Queueing at Bank (模拟)
1017. Queueing at Bank (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Supp ...
- PAT 甲级 1017 Queueing at Bank (25 分)(模拟题,有点思维小技巧,第二次做才理清思路)
1017 Queueing at Bank (25 分) Suppose a bank has K windows open for service. There is a yellow line ...
- pat——1017. Queueing at Bank (java中Map用法)
由PAT1017例题展开: Suppose a bank has K windows open for service. There is a yellow line in front of the ...
- 1017. Queueing at Bank (25)
Suppose a bank has K windows open for service. There is a yellow line in front of the windows which ...
- PAT 1017. Queueing at Bank
Suppose a bank has K windows open for service. There is a yellow line in front of the windows which ...
- 1017. Queueing at Bank (25) - priority_queuet
题目如下: Suppose a bank has K windows open for service. There is a yellow line in front of the windows ...
- PAT 甲级 1017 Queueing at Bank
https://pintia.cn/problem-sets/994805342720868352/problems/994805491530579968 Suppose a bank has K w ...
- 1017 Queueing at Bank (25)(25 point(s))
problem Suppose a bank has K windows open for service. There is a yellow line in front of the window ...
随机推荐
- 使用SpringMVC报错 Error creating bean with name 'conversionService' defined in class path resource [springmvc.xml]
使用SpringMVC报错 Error creating bean with name 'conversionService' defined in class path resource [spri ...
- jQuery中hover和blur使用代理delegate无效的解决方法
今天就遇到了这样的小问题: $(document).ready(function(){ $('.status_on').hover(function(){ $(this).html('点击禁用'); ...
- SessionUtils
import com.diyfintech.constant.Constant.SuperAdmin; import com.diyfintech.pojo.SysUser; import org.a ...
- 51nod 1383 母函数
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1383 一眼望去,不就是硬币兑换吗,母函数或者dp,直接暴力dp就A了,不 ...
- IOS-RunTime应用
什么是Runtime 总结起来,iOS中的RunTime的作用有以下几点: 1.发送消息(obj_msgSend) 2.方法交换(method_exchangeImplementations) 3.消 ...
- ipmitool 查看硬件信息
[root@75-6-25-yf-core ~]# cat /var/log/mcelog MCE 0HARDWARE ERROR. This is *NOT* a software problem! ...
- NTP服务器和国内可用的NTP地址
NTP 是什么? NTP 是网络时间协议(Network Time Protocol),它用来同步网络设备[如计算机.手机]的时间的协议. NTP 实现什么目的? 目的很简单,就是为了提供准确 ...
- java String 转 Long 两种方法区别
Long.ValueOf("String")返回Long包装类型 包装类型: Byte,Integer,Short,Long,Boolean,Character,Float,Dou ...
- Windows Phone 8 Programming Considerations
OpenGL ES 2.0 Support Marmalade supports the Open GL ES 2.0 Graphics API on Windows Phone 8 using a ...
- Visual Studio编辑类模板的位置
VS的版本一直在不断更新,每个版本的安装目录都是有一点变化,所以模板文件的位置也是不一样的,下面是从StackOverflow看到的一个大合集,转发记录一下: Extract, edit and re ...