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 ... 
