[PAT甲级]1014. Waiting in Line (30)(银行排队办理业务结束时间 队列的应用)

银行排队(Bank) 今天我来发一个银行排队(Bank) 的博客吧 题目: K个人来银行排队办理业务。 银行有n个窗口可以同时办理,每个窗口允许有m个人排队,其余的人在银行大厅等待。 当某个窗口排队人数少于m时,在大厅等待的人可进入该窗口排队。 每个人都有自己要办的业务,每个业务要花费一定的时间, 银行的上班时间是早上8点到下午17点,若超过17点,就无法办理相关的业务了。 有q次查询,查询q个顾客办理业务结束时的时间。对于无法办理相关业务的查询,输出sorry。 假设第一位顾客从早上8点开始办理业务,k个顾客编号依次为: 阅读详情

1014. Waiting in Line (30)

原题链接
相似题目 1017. Queueing at Bank (25)
Suppose a bank has N windows open for service. There is a yellow line in front of the windows which devides the waiting area into two parts. The rules for the customers to wait in line are:

  • The space inside the yellow line in front of each window is enough to contain a line with M customers. Hence when all the N lines are full, all the customers after (and including) the (NM+1)st one will have to wait in a line behind the yellow line.
  • Each customer will choose the shortest line to wait in when crossing the yellow line. If there are two or more lines with the same length, the customer will always choose the window with the smallest number.
  • Customer[i] will take T[i] minutes to have his/her transaction processed.

Now given the processing time of each customer, you are supposed to tell the exact time at which a customer has his/her business done.

For example, suppose that a bank has 2 windows and each window may have 2 custmers waiting inside the yellow line. There are 5 customers waiting with transactions taking 1, 2, 6, 4 and 3 minutes, respectively. At 08:00 in the morning, customer1 is served at window1 while customer2 is served at window2. Customer3 will wait in front of window1 and customer4 will wait in front of window2. Customer5 will wait behind the yellow line.

At 08:01, customer1 is done and customer5 enters the line in front of window1 since that line seems shorter now. Customer2 will leave at 08:02, customer4 at 08:06, customer3 at 08:07, and finally customer5 at 08:10.

Input

Each input file contains one test case. Each case starts with a line containing 4 positive integers: N (<=20, number of windows), M (<=10, the maximum capacity of each line inside the yellow line), K (<=1000, number of customers), and Q (<=1000, number of customer queries).

The next line contains K positive integers, which are the processing time of the K customers.

The last line contains Q positive integers, which represent the customers who are asking about the time they can have their transactions done. The customers are numbered from 1 to K.

Output

For each of the Q customers, print in one line the time at which his/her transaction is finished, in the format HH:MM where HH is in [08, 17] and MM is in [00, 59]. Note that since the bank is closed everyday after 17:00, for those customers who cannot be served before 17:00, you must output “Sorry” instead.

Sample Input

2 2 7 5
1 2 6 4 3 534 2
3 4 5 6 7

Sample Output

08:07
08:06
08:10
17:00
Sorry

题目大意:

  • 银行排队办理业务,有n个窗口,每个窗口前有黄线,黄线内最多排m个人,剩下的人在黄线外等候
  • 给出k个人,并给出他们办理业务所需要的时间time,查询p个人的办理业务结束时间,如果开始办理业务时超过了17:00,输出sorry
  • 08:00开始办理业务,17:00结束办理业务,如果业务已经开始办理,就继续办理直到办理业务结束窗口才关门。
  • 如果某个窗口有人办理业务结束,黄线外的人去那个窗口的队尾等候,如果两个窗口同时有人办理业务结束,就选择窗口号较小的

思路:

  • 这道题考察队列的应用
  • 设置结构体,包含队首的人出队(结束)时间poptime,队尾的人结束时间endtime,队列q包含队伍内每个人办理业务所需要的时间
  • 设置poptime,方便计算黄线外的何时能入队
  • 设置endtime,判断后面入队的人是否需要输出sorry
  • 数组result保存每个人结束时间,用分钟计算,最后输出转化为XX:XX比较方便
  • 数组sorry记录是否需要输出sorry
  • 先处理能够排进黄线内的人,再入队出队处理在黄线外等候的人

代码:

#include <iostream>
#include <cstdio>
#include <queue>
#include <vector>
using namespace std;
struct node{
    int poptime, endtime;//队首的人出队(结束)时间  队尾的人结束时间
    queue<int> q;
};
int main()
{
    //n个窗口(n<=20) m为黄线内最大容量(m<=10) k个顾客(k<=1000) q为要查询的顾客人数(q<=1000)
    int n, m, k, p, index=1;
    scanf("%d%d%d%d", &n, &m, &k, &p);
    vector<int> time(k+1), result(k+1);//顾客办理业务所需时间  顾客办理业务结束时间
    for(int i=1; i<=k; i++)
        scanf("%d", &time[i]);
    vector<node> window(n+1);//n个窗口n个队
    vector<bool> sorry(k+1, false);
    //处理开始就在黄线内顾客 前面m*n
    for(int i=1; i<=m; i++){
        for(int j=1; j<=n; j++){
            if(index <= k){
                window[j].q.push(time[index]);
                if(window[j].endtime >= 540)//队尾的人结束时间超过下午五点
                    sorry[index] = true;
                window[j].endtime += time[index];
                result[index] = window[j].endtime;
                index++;
            }
        }
    }
    //开始无法排进黄线内  m*n以后的人
    while(index <= k){
        int minPoptime=window[1].poptime, minWindow=1;
        for(int i=2; i<=n; i++){//寻找最先有人出来的窗口
            if(window[i].poptime < minPoptime){
                minPoptime = window[i].poptime;
                minWindow = i;
            }
        }
        window[minWindow].q.pop();//出队一个
        window[minWindow].q.push(time[index]);//入队
        window[minWindow].poptime += window[minWindow].q.front();//更新队首结束时间
        if(window[minWindow].endtime >= 540)
            sorry[index] = true;
        window[minWindow].endtime += time[index];//更新队尾结束时间
        result[index] = window[minWindow].endtime;//记录该顾客结束时间
        index++;
    }
    for(int i=1; i<=p; i++){
        int check;
        scanf("%d", &check);
        int temp = result[check];
        if(sorry[check] == true)
            printf("Sorry\n");
        else
            printf("%02d:%02d\n", (temp+480)/60, (temp+480)%60);//480 早上八点
    }
    return 0;
}
PAT甲级 1014 Waiting in Line Suppose a bank has N windows open for service. There is a yellow line in front of the windows which devides the waiting area into two parts. The rules for the customers to wait in line are: Now given the processing time of each customer, you are supposed t 阅读详情

相关推荐

[STM32H750]HAL库下FMC驱动正点原子MCU屏的移植与优化

本文详细介绍了在STM32H750平台上使用HAL库移植与优化正点原子MCU屏幕驱动的完整过程。重点解析了FMC硬件配置、Cache一致性处理、精确延时实现等关键技术难点,提供了实用的移植方案和性能优化技巧,帮助开发者高效解决屏幕显示问题。

rock5的博客 286

PTA 银行排队问题之单队列多窗口加VIP服务 (Java)

假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙。当有窗口空闲时,下一位顾客即去该窗口处理事务。当有多个窗口可选择时,假设顾客总是选择编号最小的窗口。有些银行会给VIP客户以各种优惠服务,例如专门开辟VIP窗口。为了最大限度地利用资源,VIP窗口的服务机制定义为:当队列中没有VIP客户时,该窗口为普通顾客服务;当该窗口空闲并且队列中有VIP客户在等待时,排在最前面的VIP客户享受该窗口的服务。

xiao_hei_a的博客 780

bcftools实战指南:从VCF文件处理到变异分析全流程解析

在基因组数据分析中,VCF(Variant Call Format)文件是存储基因序列变异信息的标准格式,广泛应用于群体遗传学和生物信息学研究。其核心原理是通过结构化文本记录SNP、INDEL等变异位点的基因型、质量值和注释信息。掌握高效处理VCF文件的技术,对于提升变异检测、数据清洗和下游分析的工作流效率具有重要价值。在生物信息学工具生态中,bcftools作为处理VCF/BCF文件的瑞士军刀,通过模块化设计实现了数据查询、过滤、统计和格式转换等核心功能。其流式处理架构支持管道化操作,能有效应对海量基因组

weixin_29081703的博客 324

【id:728】【5分】L. 银行排队问题之单队列多窗口加VIP服务

假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙。当有多个窗口可选择时,假设顾客总是选择编号最小的窗口。本题要求输出前来等待服务的N位顾客的平均等待时间、最长等待时间、最后完成时间,并且统计每个窗口服务了多少名顾客。同时,当轮到某VIP客户出列时,若VIP窗口非空,该客户可以选择空闲的普通窗口;最后一行给出正整数K(≤10)—— 为开设的营业窗口数,以及VIP窗口的编号(从0到K-1)。当该窗口空闲并且队列中有VIP客户在等待时,排在最前面的VIP客户享受该窗口的服务。

归忆_AC的博客 579

petalinux i2c的配置

1.硬件平台配置 1.内核配置 cd petalinux-config -c kernel -> Device Drivers -> I2C support -> i2C Hardware Bus support -> Xilinx I2C Controller Pressing 启用CONFIG_I2C_XILINX=y 2.修改用户设备树 cd cd project-spec/meta-user/recipes-bsp/device-tree/files/ i2c2:

u013403954的博客 4313

PCB工程师必看:别再搞错1078玻纤布的Dk了,手把手教你算等效介电常数

本文为PCB工程师提供了1078玻纤布等效介电常数(Dk)的详细计算指南,帮助解决高速设计中的信号完整性问题。通过解析玻纤布结构、混合介质理论和实战计算方法,指导工程师准确设置EDA工具参数,避免常见的Dk计算误区,提升设计精度和仿真准确性。

weixin_42546392的博客 399

7-20 银行排队问题之单队列多窗口加VIP服务

7-20 银行排队问题之单队列多窗口加VIP服务

shuyuan12346的博客 741

避坑指南:处理A股通达信分时数据转日K线时,你可能会遇到的3个时间戳问题

本文针对量化交易中处理A股通达信分时数据转日K线时的常见时间戳问题,提供了专业解决方案。重点解析了午休时段处理、Pandas重采样参数设置及CSV读取时的日期解析陷阱,帮助开发者避免数据预处理错误,提升策略回测准确性。适用于Python量化交易开发者。

weixin_42549496的博客 289

7-13 银行排队问题之单队列多窗口加VIP服务

假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙。当有多个窗口可选择时,假设顾客总是选择编号最小的窗口。在第一行中输出平均等待时间(输出到小数点后1位)、最长等待时间、最后完成时间,之间用1个空格分隔,行末不能有多余空格。本题要求输出前来等待服务的N位顾客的平均等待时间、最长等待时间、最后完成时间,并且统计每个窗口服务了多少名顾客。在第二行中按编号递增顺序输出每个窗口服务了多少名顾客,数字之间用1个空格分隔,行末不能有多余空格。

qq_73702550的博客 965

Jenkins Job DSL:用代码管理CI/CD配置的实践指南

Jenkins 是持续集成(CI)领域的经典开源平台,其核心价值在于自动化构建与交付流程。然而传统 UI 配置方式导致配置不可版本化、难以复现、审计困难,严重制约团队规模化协作效率。Job DSL 作为一种声明式配置即代码(IaC)方案,通过 Groovy 脚本驱动 Jenkins 内部 API,实现 Job、View、Folder 等资源的程序化创建与维护,天然支持 Git 版本控制、权限审计与环境一致性保障。它不替代 Pipeline,而是与其协同构成‘流程定义’与‘基础设施定义’双轨体系,显著提升 C

weixin_33744141的博客 520

时间序列预测 | Python实现ARIMAX和VARMAX时间序列数据预测

时间序列预测 | Python实现ARIMAX和VARMAX时间序列数据预测 目录时间序列预测 | Python实现ARIMAX和VARMAX时间序列数据预测基本介绍ARIMAXVARVARMAVARMAXSESHWES参考资料 基本介绍 本文介绍ARIMAX、VAR、VARMA和VARMAX基本概念及其Python程序设计。 ARIMAX 具有外源回归量的自回归整合移动平均值(ARIMAX)是 ARIMA 模型的扩展,其还包括外生变量的建模。 外生变量也称为协变量,可以被认为是并行输入序列,其在与

前程算法屋的博客 6689

【PAT 甲级】1014 Waiting in Line

银行排队模拟系统(PAT 1014题) 解题思路 初始化窗口队列:创建N个窗口队列,每个队列最多容纳M位客户。 处理前N×M位客户:按照最短队列优先、编号最小的规则分配客户到窗口。 处理剩余客户: 找出最早完成服务的窗口(队首剩余时间最小) 推进时间,更新所有窗口的剩余服务时间 将等待客户分配到空出的队列 计算客户服务时间: 开始时间 = 窗口完成前面所有客户服务的时间 结束时间 = 开始时间 + 客户服务时间 处理查询:检查客户是否在17:00前开始服务,输出结果或"Sorry" 关键

AmiaYukiAchami的博客 591

课堂练习及课后作业2.1:外部中断

本关任务:通过相关知识以及实验回答:版本 1 内核的第 6 次时钟中断发生时,断点和恢复点(指令地址)分别是多少?本关任务:修改版本 0 内核,使得每发生 100 次时钟中断,就在屏幕上输出一个字符‘t’和当时的进程号,如“t(0)”表示0号进程运行时发生了时钟中断。本关任务:通过实际操作回答在输出第一行 0/1 字符的过程中(如下图所示),共发生了几次时钟中断?本关任务:修改版本 1 内核源码,使得每次时钟中断发生时,都在屏幕上输出字符‘t’。分析版本1内核,找到第一次时钟中断的恢复点地址。

Junds0的博客 1万+

浙大 PAT 甲级 1014 Waiting in Line

一道简单的模拟题。黄线以前是N条队伍,每条队伍容量为M。黄线以后可以看作只有一条队伍,现将黄线前的N条队伍排满(如果可以排满的话),每当某队有人离开,黄线后的人补上去,如果同时有多人离开,按照队伍编号从小到大补上去。 我定义了一个结构体Customer代表每位排队人员,存放编号和结束时间。我用的数据结构是vector<queue<Customer>>,用来模拟N个队列。先...

qq_39115541的博客 1673

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

PAT 甲级 1014 Waiting in Line (30 分) queue+(附题意问题错误代码)

题意: 银行有n个窗口,每个窗口最多可以有m个人排队;(!!!注意:这些人不是按照顺序自己随便选窗口的,只能按照顺序从窗口1-n排) 如果n个窗口排满的话,剩下的人要站在黄线后面,等到有窗口队列不满的时候,再挨个过去排队;过去排队的时候优先选队列人数少的,人数少的一样的话选标号小的窗口 思路: 用队列表示窗口的队列,队列里面存的是每个人结束的时间, a[] 表示每个人办业务时间,b[]表...

床前明月光 503

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

PAT 甲级 1014 Waiting in Line (30 分)

今天这两道模拟题没折磨死我。 Note: 1、思路 这题思路还挺难想的。因为线外的人到哪个窗口办理业务是未知的,所以只能把黄线内先填满,然后用模拟(走一个进一个)的方式来计算每个人的开始时间。 2、数据结构 一开始想的是只用结构体和数组,但后来发现这样在模拟的时候没法获取窗口第二个人的信息。所以还是选择了queue。结构体根据题意来确定,因为窗口和顾客都含有多种数据,所以选择两个结构体。 窗口结构...

qq_39564678的博客 232

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

PAT甲级 1014 Waiting in Line (30 分)

题意:n个窗口,每个窗口可以排m人。有k为顾客需要办理业务,给出了每个客户的办理业务时间。 银行在8点开始服务,如果窗口都排满了,客户就得在黄线外等候。如果有一个窗口用户服务结束, 黄线外的客户就进来一个。如果有多个可选,选窗口id最小的。 输出查询客户的服务结束时间。 如果客户在17点或者以后还没开始服务,就输出Sorry 如果已经开始了,无论多长都会继续服务的。 思路: 建立一个优先队列,存储...

smilng的博客 260

PAT 甲级测试题目 -- 1014 Waiting in Line

题目链接 题目大意 银行有 N 个窗口,窗口前有一条黄线。并且有以下规则 黄线前每个窗口足够容纳 M 名顾客,因此若 N 个队伍都满了,则其余的乘客需要站在黄线外面等候 每名顾客都会选择最短的一队进入黄线区域(黄线内队伍中有顾客办理完成手续了),如果有两队人数一样,则从窗口号较小的队伍插入。 每名顾客都有自己办理业务的时间 业务办理从 8:00 开始,到 17:00 结束。 思路 两...

287

PAT - 甲级 - 1014. Waiting in Line (30)(STL-queue)

Suppose a bank has N windows open for service. There is a yellow line in front of the windows which devides the waiting area into two parts. The rules for the customers to wait in line are:  The

i逆天耗子 364

PAT甲级——A1014 Waiting in Line

Suppose a bank hasNwindows open for service. There is a yellow line in front of the windows which devides the waiting area into two parts. The rules for the customers to wait in line are: Th...

weixin_30632089的博客 121

PAT 甲级 1014 Waiting in Line (30 分)(queue的使用,模拟题,有个大坑)

1014Waiting in Line(30分) Suppose a bank hasNwindows open for service. There is a yellow line in front of the windows which devides the waiting area into two parts. The rule...

weixin_30821731的博客 287

PAT 甲级 1014 Waiting in Line (30 分)

题目 分析 题目的大意就是模拟银行排队办理业务的场景。 有几个注意点 用户在17点前已经在办理业务了,就算已经到17点也继续办下去 客户每次都是选择最短的队列 之前选择了从0开始第一个队列 总有一个点过不去 封装了一些方法 代码搞得很冗长了。。 Code #include <stdio.h> #include <iostream> #include <vector> #include <queue> using namespace std; struc

code_garden 140

PAT甲级-1014. Waiting in Line (30)(模拟)

1014. Waiting in Line (30)时间限制400 ms内存限制65536 kB代码长度限制16000 B判题程序Standard作者CHEN, YueSuppose a bank has N windows open for service. There is a yellow line in front of the windows which devides the wait...

Some. 510

PAT甲级 - 1014 Waiting in Line (银行排队问题 | queue+模拟)

Link题意:银行里由N个窗口,每个窗口前可容纳M个人等待;N*M之后的人需要在黄线以外等待寻找最短且序号最小的窗口进入等待;现告诉你K个人办理业务需要的时间time_cost,试问其中Q个人的离开时间为多少。已知银行8:00开始接待客户,17:00停止接待。思路:显而可见,前N*M个人分别按照1~N,1~N……的顺序进入窗口,之后就是黄线内的N*M个人离开一个,黄线外的客户进入该窗口。设置N个queue模拟N个窗口,定义统一是时间线timeLine,每次寻找N个窗口头部耗时最短的用时minn_cost,将

Satur9的博客 361
上一篇: [PAT甲级]1013. Battle Over Cities (25)(图的遍历,统计强连通分量个数)
下一篇: [PAT甲级]1015. Reversible Primes (20)(可逆素数判断)
whl_program
博客等级 码龄11年 101粉丝 279原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值