1014 Waiting in Line (30分)解题思路

2024-01-01 09:38
文章标签 waiting 30 解题 思路 line 1014

本文主要是介绍1014 Waiting in Line (30分)解题思路,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1014 Waiting in Line (30分)解题思路

原题链接

这题我觉得有点难度,细节上的东西不少,最重要的思想是要设定一个统一的时间轴timeLine

思路

设置N个队列(每个窗口都对应一个队列),队列长度最大为M,初始化的时候将每个人的编号填入所有的队列,如果填满了N*M,就停止填充,剩下的编号作为排队线以外的顾客编号。填充方法如下图
在这里插入图片描述
另外,开辟一个数组cost_time[]cost_time[i]表示顾客i办理业务的耗时

然后开启循环,在所有队列的首部中找出耗时最少的顾客的编号,假设下图中的黑色圆圈中的编号2顾客的cost_time[2]是编号1,2,3,4中耗时最少的,则把1,2,3,4的耗时都减去cost_time[2],即
cost_time[i] = cost_time[i] - cost_time[2] (i=1, 2, 3, 4)
在这里插入图片描述

与此同时,时间轴往后推进,timeLine = timeLime + cost_time[2]

如果减完后cost_time[i] = 0,则说明顾客i已经办完业务了,记录下i的结束时间为此时的time_line

然后更新队列,将队列首部中cost_time为0的顾客编号pop掉,将排队线以外的新顾客添加到队尾。

重复上述操作直至队列为空。

AC代码

#include <iostream>
#include <queue>
using namespace std;queue<int>queue_[21];
int cost_time[1002];        //每个人办理业务的耗时
int cost_time_backup[1002]; //cost_time的备份数组。后面要用
int inquiryID[1002];//询问者的ID
int N, M, K, Q;     //N: 总窗口数     M:  队列长度    K:  客户数      Q:  询问数
int count_;         //队列中填充过的人数
int timeLine;       //时间线,这是统一的时间轴
int leave_time_table[1002];//完成办理的时刻
//找出所有队列的队列首元素中
int findSmallestCost(){int min = 999999;int index=-1;for(int i=1; i<=N; i++){if(queue_[i].size() == 0){continue;}else if(cost_time[queue_[i].front()] < min){min = cost_time[queue_[i].front()];index = queue_[i].front();}}return index;//如果返回-1说明所有的队列已经空了
}
//更新队列
void update(){for(int i=1; i<=N; i++){if(queue_[i].size()>0 && cost_time[queue_[i].front()] == 0){queue_[i].pop();if(count_ <= K)//如果填充的数量还小于K,则在此队列中填充一个人queue_[i].push(count_++);}}
}    
void showTime(){int ID;int hour, minute;int time;for(int i=1; i<=Q; i++){ID = inquiryID[i];time = leave_time_table[ID];hour = time / 60 + 8;minute = time % 60;if(time - cost_time_backup[ID] >= 540)printf("Sorry\n");elseprintf("%02d:%02d\n", hour, minute);}
}
int main(){count_ = 1;cin>>N>>M>>K>>Q;for (int i=1; i<=K; i++){cin>>cost_time[i];cost_time_backup[i] = cost_time[i];}for(int i=1; i<=Q; i++){cin>>inquiryID[i];}int flag = 0;int i=1,j=1;//首次填充队列for(i=1; i<=M; i++){for(j=1; j<=N; j++){if(count_ > K){//如果填充的数量等于了K,则停止填充flag = 1;break;}queue_[j].push(count_);count_++;}if(flag == 1)break;}int index;int dec;for(;;){index = findSmallestCost();if(index == -1)break;dec = cost_time[index];timeLine += dec;//cout << timeLine << endl;for(int i=1; i<=N; i++){if(queue_[i].size() > 0){cost_time[queue_[i].front()] -= dec;if(cost_time[queue_[i].front()] == 0){leave_time_table[queue_[i].front()] = timeLine;}}}update();}showTime();return 0;
}

这篇关于1014 Waiting in Line (30分)解题思路的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/558849

相关文章

css中的 vertical-align与line-height作用详解

《css中的vertical-align与line-height作用详解》:本文主要介绍了CSS中的`vertical-align`和`line-height`属性,包括它们的作用、适用元素、属性值、常见使用场景、常见问题及解决方案,详细内容请阅读本文,希望能对你有所帮助... 目录vertical-ali

shell脚本自动删除30天以前的文件(最新推荐)

《shell脚本自动删除30天以前的文件(最新推荐)》该文章介绍了如何使用Shell脚本自动删除指定目录下30天以前的文件,并通过crontab设置定时任务,此外,还提供了如何使用Shell脚本删除E... 目录shell脚本自动删除30天以前的文件linux按照日期定时删除elasticsearch索引s

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

linux进程D状态的解决思路分享

《linux进程D状态的解决思路分享》在Linux系统中,进程在内核模式下等待I/O完成时会进入不间断睡眠状态(D状态),这种状态下,进程无法通过普通方式被杀死,本文通过实验模拟了这种状态,并分析了如... 目录1. 问题描述2. 问题分析3. 实验模拟3.1 使用losetup创建一个卷作为pv的磁盘3.

mysql-8.0.30压缩包版安装和配置MySQL环境过程

《mysql-8.0.30压缩包版安装和配置MySQL环境过程》该文章介绍了如何在Windows系统中下载、安装和配置MySQL数据库,包括下载地址、解压文件、创建和配置my.ini文件、设置环境变量... 目录压缩包安装配置下载配置环境变量下载和初始化总结压缩包安装配置下载下载地址:https://d

JAVA利用顺序表实现“杨辉三角”的思路及代码示例

《JAVA利用顺序表实现“杨辉三角”的思路及代码示例》杨辉三角形是中国古代数学的杰出研究成果之一,是我国北宋数学家贾宪于1050年首先发现并使用的,:本文主要介绍JAVA利用顺序表实现杨辉三角的思... 目录一:“杨辉三角”题目链接二:题解代码:三:题解思路:总结一:“杨辉三角”题目链接题目链接:点击这里

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

ural 1014. Product of Digits贪心

1014. Product of Digits Time limit: 1.0 second Memory limit: 64 MB Your task is to find the minimal positive integer number  Q so that the product of digits of  Q is exactly equal to  N. Inpu