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 ...
随机推荐
- 在oracle中插入数据报错:ORA-00984列在此处不允许
这里报错的原因就是当数据类型varchar2时没有使用单引号. 没写单引号,不管是双引号还是什么都没写都会报这个错误.
- python学习笔记(xlwt/xlrd下载安装)
python支持处理Excel 可以使用xlwt xlrd 模块 分别在https://pypi.python.org/pypi/xlwt 和 https://pypi.python.org/pyp ...
- 【C#基本功 控件的用法】 委托
接触C#这段时间,很多内容容易理解,但也也有很多内容总是无法踏过门槛,就像Delegate 委托,这种新的机制是Labview不具备的,他的一个用法,也让我们这些从labview跨越过来的coder, ...
- Ajax-05 使用XMLHttpRequest和jQuery实现Ajax实例
需求: (django)使用XMLHttpRequest和jQuery实现Ajax加法运算 url.py: from django.conf.urls import url from hello im ...
- Autolayout .Compact or .Regular [iPhone/iPad]
- 状态管理(Vuex、 Flux、Redux、The Elm Architecture)
1.https://vuex.vuejs.org/zh-cn/intro.html (vuex) 这就是 Vuex 背后的基本思想,借鉴了 Flux.Redux.和 The Elm Architect ...
- split方法的使用
// 分隔竖线 String[] param = text.split("\\|"); //分隔问号 String name = singleResource.get(&quo ...
- TCP和Http的区别!(转) 真心有帮助!!!
一.From:http://thisliy.javaeye.com/blog/710122 http://wenku.baidu.com/view/14a30d0102020740be1e9b84.h ...
- Quartz快速入门
Quartz是一个定时任务调度的框架,在预定的时间到达时,执行某一任务 可认为是JDK的Timer类的扩展 Quartz的核心接口Scheduler – 核心调度器Job – 任务JobDetail ...
- tomcat映射物理路径
<Context path="/woyoubaoweb/upload" docBase="/opt/file/image/woyoubaoweb/upload&qu ...