题意:银行有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的更多相关文章

  1. PAT 1017 Queueing at Bank[一般]

    1017 Queueing at Bank (25)(25 分)提问 Suppose a bank has K windows open for service. There is a yellow ...

  2. PAT甲级1017. Queueing at Bank

    PAT甲级1017. Queueing at Bank 题意: 假设一家银行有K台开放服务.窗前有一条黄线,将等候区分为两部分.所有的客户都必须在黄线后面排队,直到他/她轮到服务,并有一个可用的窗口. ...

  3. PAT 1017 Queueing at Bank (模拟)

    1017. Queueing at Bank (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Supp ...

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

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

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

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

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

  9. PAT 甲级 1017 Queueing at Bank

    https://pintia.cn/problem-sets/994805342720868352/problems/994805491530579968 Suppose a bank has K w ...

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

随机推荐

  1. JSON01_资料

    1. 资料网址: http://blog.csdn.net/vincent_czz/article/details/7333977 http://blog.csdn.net/huangwuyi/art ...

  2. 在OpenStack里怎样配置Neutron,让虚拟机访问外网

    http://blog.csdn.net/zhangli_perdue/article/details/50264681 OpenStack里虚机(或者叫instance)只有在分配floating ...

  3. DOM元素的位置、尺寸及更多的信息

    一.基本概念 document.documentElement是整个DOM树的根节点,对应的元素就是html.下面将其称作根元素或根节点. document.body,对应的元素是body 二.浏览器 ...

  4. Python正则表达式------进阶

    Python正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re ...

  5. Struts08---全局结果和全局异常的配置

    01.创建测试页面 <%-- 验证全局结果 和 局部结果 --%> <a href="user/UserAction_add">新增用户</a> ...

  6. List排序共通代码

    此共通方法可以根据特定字段进行排序 package com.gomecar.index.common.utils; import java.lang.reflect.Method; import ja ...

  7. react use axios拦截器

    import axios from 'axios'; improt Promise from 'es6-promise'; Promise.polyfill(); const axiosService ...

  8. PostgreSQL归档日志 手动触发归档 select pg_switch_xlog()

    (转,做记录) 一 环境信息--1.1 PostgreSQL 版本 9.3.0 --1.2 postgresql.conf wal_level = hot_standbyarchive_mode = ...

  9. sysbench安装for oracle

    RHEL7.2+ 1.依赖包安装 * autoconf * automake * cdbs * debhelper (>= 9) * docbook-xml * docbook-xsl * li ...

  10. rem第一天

    Rem为单位 CSS3的出现,他同时引进了一些新的单位,包括我们今天所说的rem.在W3C官网上是这样描述rem的——“font size of the root element” .下面我们就一起来 ...