题意:银行有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. Maven添加Oracle驱动及依赖

    oracle驱动先去官网下载,下载下来后,需要安装到maven本地仓库,然后再pom中添加依赖. 1下载oracle驱动包 ojdbc6-11.2.0.3.jar 2命令行安装到maven仓库 mvn ...

  2. numpy 矩阵归一化

    new_value = (value - min)/(max-min) def normalization(datingDatamat): max_arr = datingDatamat.max(ax ...

  3. 绘制三角形(sass)

    绘制三角形 /// draw triangle/// @param {type} $type [''] - triangleUp triangleDown triangleLeft triangleR ...

  4. node基础(一)——http模块

    一.http模块 http.createSverver() http是node自带的模块,通过require("http")的方法载入: 使用http创建服务器: http.cre ...

  5. 7zip 自解压安装程序

    包含自解压安装器的包https://jaist.dl.sourceforge.net/project/sevenzip/7-Zip/9.20/7z920_extra.7z详细说明见7-zip帮助文档的 ...

  6. datagrid拖动列头更换排列顺序

    在做这个功能的时候在网上找了大量资料,发现都不适用,要不然就是代码太冗余,所以另起炉灶,自己封装了这个函数 下面是完整的代码: <!DOCTYPE html> <html> & ...

  7. 查看SQLServer的最大连接数

    如何查看SQLServer的最大连接数?相信很多人对个很有兴趣,一下就给出两种方法: 1. 查询服务器属性 默认服务设置为0(表示不受限制). 2. SQL查看最大连接数 这里的32767就是服务器的 ...

  8. eclipse 远程调试tomcat6

    一.tomcat6配置 1.修改tomcat\bin目录下的startup.bat如下,红色部分是新增的,修改后另存为jpda.bat set JPDA_ADDRESS=8114set JPDA_TR ...

  9. Framework、Cocoa、Xcode

    什么是Cocoa? NeXTSTEP(以Unix作为内核的操作系统)内置的许多库(libraries)和工具,让程序员以一种优雅的方式与窗口管理器进行交互,这些libraries叫做Framework ...

  10. 2017.11.10 MPLAB IPE + ICD-3+ PIC32MM

    A trouble with ICD-3  programmer. MCU:  PIC32MM sw:  MPLAB IPE tool:  ICD-3 1 product introduction a ...