备份比赛数据【算法赛】
0备份比赛数据【算法赛】 - 蓝桥云课
问题描述
蓝桥杯大赛的组委会最近遇到了一个棘手的问题。他们有 N 台电脑需要备份比赛数据,每台电脑所需的备份时间分别为 A1,A2,…,AN 分钟。
备份必须按编号顺序依次进行,即先第 1 台,再第 2 台,依此类推。每台电脑的备份需要工作人员持续操作,且必须安排在同一天内完成。例如,如果某台电脑的备份需要 5 分钟,那这 5 分钟必须安排在同一天,不能拆分到两天。如果当天剩余时间不足以完成某台电脑的备份,那就只能推迟到第二天进行。
每台电脑备份完成后,系统需要等待 B1 分钟才能开始下一台的备份。这段等待时间不需要工作人员操作,且可以跨天进行。例如,如果第 1 台电脑的备份只需在第 2 天开始后等待 10 分钟就能进行。
现在,组委会希望尽量缩短每天的工作时间,以便工作人员尽早下班休息。但上级有要求,所有电脑的备份必须在最多 T 天内完成。对此,请你帮助蓝桥杯组委会计算出每天最少需要安排的工作时间 M(M 最大不可超过 3600),以便所有电脑的备份能在 T 天内顺利完成。如果无论如何都无法满足条件,请直接输出 -1。
输入格式
第一行包含两个整数 N 和 T(1≤N,T≤105),分别表示电脑的数量和最多允许的天数。
第二行包含 N 个整数 A1,A2,…,AN,表示每台电脑的备份时间。
第三行包含 N 个整数 B1,B2,…,BN(1≤Bi≤3600),表示每台电脑备份完成后需要等待的时间。
输出格式
输出一个不超过 3600 的整数 M,表示每天最少需要安排的工作时间,以确保所有电脑的备份任务能在 T 天内完成。若无法满足条件,则输出 -1。
样例输入
3 2
1 2 3
2 2 2
样例输出
5
样例说明
每天工作时间为5分钟时,备份任务将按以下方式进行:
-
第1天:
- 第1台电脑的备份需要1分钟(第0~1分钟)。
- 等待 B1=2 分钟(第1~3分钟)。
- 第2台电脑的备份需要2分钟(第3~5分钟)。
-
第2天:
- 等待 B2=2 分钟(第0~2分钟)。
- 第3台电脑的备份需要3分钟(第2~5分钟)。
所有备份任务可在2天内完成。
思路:
代码如下:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 1e5 + 5; // 最大电脑数量+5的缓冲int N, T; // 电脑数量和允许的最大天数
int a[MAXN], b[MAXN]; // a存储备份时间,b存储等待时间/*** 检查给定每日工作时间M是否满足T天完成所有备份的条件* @param M 候选的每日工作时间* @return 是否满足条件*/
bool check(ll M)
{// 预检查:如果有任意备份时间超过M直接不可行for (int i = 1; i <= N; ++i) {if (a[i] > M) // 备份时间超过单日容量{return false;}}ll prev_end = 0; // 上一个备份的结束时间(绝对时间)ll prev_B = 0; // 上一个备份后的等待时间(初始为0)ll max_day = 0; // 记录过程中的最大天数// 遍历所有电脑进行备份模拟for (int i = 1; i <= N; ++i) {// 计算当前备份的开始时间 = 前一个结束时间 + 前一个的等待时间ll s_i = prev_end + prev_B; // 计算所在天数:总时间除以每日时长向下取整ll d_i = s_i / M; // 计算当前天的结束时间:下一天开始前的时间点ll day_end = (d_i + 1) * M; ll current_day; // 当前备份实际所在天数ll end_i; // 当前备份的结束时间// 判断能否在当天完成if (s_i + a[i] <= day_end) {// 当天可完成:结束时间直接累加end_i = s_i + a[i];current_day = d_i;} else {// 需要跨天:天数+1,结束时间在下一天的开始时刻+备份时间current_day = d_i + 1;end_i = current_day * M + a[i];}// 更新最大天数(注意天数从0开始计数)if (current_day > max_day){max_day = current_day;}// 保存当前备份的结束时间和产生的等待时间prev_end = end_i;prev_B = b[i]; // 记录当前备份后的等待时间(给下一个备份用)}// 最终天数计算:max_day是最后一个备份所在天数,实际需要+1天(天数从0计数)// 例如:max_day=0 表示第1天完成return (max_day + 1) <= T;
}int main() {ios::sync_with_stdio(false);cin.tie(nullptr); // 加速输入输出// 读取输入cin >> N >> T;for (int i = 1; i <= N; ++i) {cin >> a[i];}for (int i = 1; i <= N; ++i) {cin >> b[i];}// 二分查找初始化(左开右闭区间)ll left = 0; // 不可行下界ll right = 3601; // 可行上界(包含3600)ll ans = -1; // 最终结果// 特殊二分模板:寻找第一个可行的Mwhile (left + 1 != right) {ll mid = (left + right) / 2;if (check(mid)) {// 当前mid可行,尝试寻找更小的解right = mid; // 移动右边界} else {// 当前mid不可行,需要增大left = mid; // 移动左边界}}// 结果处理(注意边界)if (right <= 3600) {cout << right << endl;} else {cout << -1 << endl; // 无解或超出限制}return 0;
}
相关文章:
备份比赛数据【算法赛】
0备份比赛数据【算法赛】 - 蓝桥云课 问题描述 蓝桥杯大赛的组委会最近遇到了一个棘手的问题。他们有 N 台电脑需要备份比赛数据,每台电脑所需的备份时间分别为 A1,A2,…,AN 分钟。 备份必须按编号顺序依次进行,即先第 1 台,再第 2 …...
[网络安全] 滥用Azure内置Contributor角色横向移动至Azure VM
本文来源于团队的超辉老师,其系统分析了Azure RBAC角色模型及其在权限滥用场景下的攻击路径。通过利用AADInternals工具提升用户至Contributor角色,攻击者可在Azure VM中远程执行命令,创建后门账户,实现横向移动。文中详述了攻击步…...
人工智能(AI)系统化学习路线
一、为什么需要系统化学习AI? 人工智能技术正在重塑各行各业,但许多初学者容易陷入误区: ❌ 盲目跟风:直接学习TensorFlow/PyTorch,忽视数学与算法基础。 ❌ 纸上谈兵:只看理论不写代码,无法解…...
Ubuntu系统使用nmcli配置静态IP
1. 配置静态IP 以下命令请全部加上sudo, 否则很可能会报错!!! 列出可用的网络连接 nmcli connection show找到你的 WiFi 连接名称(如 "WiFi名称")。 设置静态 IP 地址、网关和 DNS nmcli connection modif…...
vue3,element-plus 表格单选、多选、反选、全选
准备 定义数据 // 表格 const table ref(); // 表格数据 import type { User } from "/interface"; const tableData ref<User[]>([]); // 表格选集 const tableSelection ref<User[]>([]); // 表格选择行 const tableSelectedRow ref<User>…...
ngx_http_core_server_name
定义在 src\http\ngx_http_core_module.c static char * ngx_http_core_server_name(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) {ngx_http_core_srv_conf_t *cscf conf;u_char ch;ngx_str_t *value;ngx_uint_t i;ngx_…...
如何提升库存系统的高并发和稳定性:算法与设计模式
库存系统是企业运营的核心模块,尤其是在电商、零售和供应链管理中,系统的高并发和稳定性直接影响订单处理的准确性和效率。面对海量订单、复杂的库存管理需求,如何在高并发环境下确保库存数据的准确性和系统的稳定性?本文将从架构…...
【Linux】从开发到系统管理深入理解环境变量
文章目录 前言一、环境变量概念1.1 为什么需要环境变量?1.2 环境变量的本质特征 二、环境变量PATH2.1 PATH的运作机制2.2 常见环境变量及其作用2.3 环境变量操作指南 三、再谈环境变量3.1main函数命令行参数解析3.2 环境变量的继承机制3.3 本地变量与内部构建命令 总…...
C++相关
1.定义pos时最好用无符号整型 如uint8_t size_t 编译器可能会有(有符号/无符号不匹配)的警告 总的来说就是符号一致 2.遇到俩个lambda相互调用的情况 使用std:funtion前置声明 3.回顾了虚函数,定义virtual 就是虚函数 一般是父类指针指向子…...
智算中心系统化建设与运营框架
智算中心系统化建设与运营框架 围绕智算中心全生命周期,从政策驱动到技术落地构建完整解决方案: 一、政策与产业生态 政策支撑体系 算力补贴机制: 国家层面:工信部“东数西算”工程对西部智算中心给予电价优惠(0.3元/…...
空气质量查询API:助力健康生活与环境监测的智能工具
引言 随着工业化和城市化的快速发展,空气质量问题日益受到人们的关注。空气质量不仅影响我们的日常生活,还直接关系到我们的健康。因此,了解空气质量指数(AQI)以及各项污染物的浓度,对于保障人们的健康至关…...
【CGE】社会核算矩阵构建(一):SAM基本结构
【CGE】社会核算矩阵构建(一):SAM基本结构 社会核算矩阵构建(一):SAM基本结构一、SAM的概念和基本特点二、SAM的基本结构1.开放经济体的SAM表结构2.SAM表各账户的主要核算内容(1)社会…...
Ubuntu 系统部署 Ollama + DeepSeek + Docker + Ragflow
🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 Mysql数据库规范 一、Ol…...
深入探究 JVM 堆的垃圾回收机制(二)— 回收
GC Roots 枚举需要遍历整个应用程序的上下文,而在进行可达性分析或者垃圾回收时,如果我们还是进行全堆扫描及收集,那么会非常耗时。JVM 将堆分为新生代及老生代,它们的回收频率及算法不一样。 1 回收算法 在进行可达性分析时&am…...
第三讲 | C/C++内存管理完全手册
C/C内存管理 一、 C/C内存分布二、 C语言中动态内存管理方式:malloc/calloc/realloc/free三、 C内存管理方式1. new/delete操作内置类型2. new和delete操作自定义类型 四、operator new和operator delete函数(重点)五、new和delete的实现原理…...
2021年蓝桥杯第十二届CC++大学B组真题及代码
目录 1A:空间(填空5分_单位转换) 2B:卡片(填空5分_模拟) 3C:直线(填空10分_数学排序) 4D:货物摆放(填空10分_质因数) 5E…...
秒杀业务优化之从分布式锁到基于消息队列的异步秒杀
一、业务场景介绍 优惠券、门票等限时抢购常常出现在各类应用中,这样的业务一般为了引流宣传而降低利润,所以一旦出现问题将造成较大损失,那么在业务中就要求我们对这类型商品严格限时、限量、每位用户限一次、准确无误的创建订单,…...
IntelliJ IDEA 将 Spring Boot 项目远程部署到服务器
使用 IntelliJ IDEA 将 Spring Boot 项目远程部署到服务器的详细步骤,涵盖多种常见方法: 方法一:通过 SSH Maven 插件直接部署 1. 服务器环境准备 确保服务器已安装: Java 运行环境(与项目 JDK 版本一致࿰…...
Qt 重入和线程安全
重入和线程安全 在整个文档中,"重入"和 "线程安全 "这两个术语被用来标记类和函数,以表明它们在多线程应用程序中的使用方式: 线程安全函数可以同时被多个线程调用,即使调用使用的是共享数据,因…...
23种设计模式中的策略模式
在策略模式定义了一系列算法或策略,并将每个算法封装在独立的类中,使得它们可以互相替换。通过使用策略模式,可以在运行时根据需要选择不同的算法,而不需要修改客户端代码。 策略模式:Strategy。指的是,定义…...
纯vue手写流程组件
前言 网上有很多的vue的流程组件,但是本人不喜欢很多冗余的代码,喜欢动手敲代码;刚开始写的时候,确实没法下笔,最后一层一层剥离,总算实现了;大家可以参考我写的代码,可以拿过去定制…...
WPS宏开发手册——使用、工程、模块介绍
目录 系列文章前言1、开始1.1、宏编辑器使用步骤1.2、工程1.3、工程 系列文章 使用、工程、模块介绍 JSA语法 第三篇练习练习题,持续更新中… 前言 如果你是开发人员,那么wps宏开发对你来说手拿把切。反之还挺吃力,需要嘻嘻…...
面试中如何回答性能优化的问题
性能问题和Bug不同,后者的分析和解决思路更清晰,很多时候从应用日志(文中的应用指分布式服务下的单个节点)即可直接找到问题根源,而性能问题,其排查思路更为复杂一些。 对应用进行性能优化,是一个系统性的工程,对工程师的技术广度和技术深度都有所要求。一个简单的应用…...
django入门教程之request和reponse【二】
接上节:入门【一】 再创建一个orders子应用,python manager.py startapp orders,orders目录中新建一个urls.py文件。结构如图: 通过上节课,我们知道在views.py文件中编写函数时,有一个默认入参request&…...
解决 IntelliJ IDEA 方法断点导致程序无法运行的问题
前言 在日常开发中,调试是程序员不可或缺的工具之一。IntelliJ IDEA 作为一款功能强大的集成开发环境(IDE),提供了丰富的调试功能,例如设置断点、单步执行、变量监视等。然而,有时候我们在调试过程中会遇到…...
RAG优化:python从零实现[吃一堑长一智]循环反馈Feedback
本文将介绍一种有反馈循环机制的RAG系统,让当AI学会"吃一堑长一智",给传统RAG装了个"后悔"系统,让AI能记住哪些回答被用户点赞/拍砖,从此告别金鱼记忆: 每次回答都像在玩roguelike:失败结局会强化下次冒险悄悄把优质问答变成新知识卡牌,实现"以…...
日常学习开发记录-select组件(2)
日常学习开发记录-select组件(2) 第二阶段:增强功能 给现有select组件新增功能 第二阶段:增强功能 键盘操作支持 支持键盘上下箭头选择选项支持回车键确认选择支持Esc键关闭下拉菜单 <template><div:class"[my-s…...
微服务 - 高级篇
微服务 - 高级篇 一、服务治理(一)服务注册与发现(二)负载均衡(三)服务熔断与降级 二、分布式事务(一)解决方案(二)最终一致性 三、性能优化(一&a…...
服务器入门笔记
服务器 采用linux操作系统 SN号 服务器的唯一标识 1U的服务器的高度——4.445cm 服务器上UID灯用于定位服务器 服务器是计算机的一种。在网络中为其他客户机提供计算或者应用服务。 服务器用来响应终端的服务请求,并进行处理 服务器的分类—— 按物理形态&#…...
【Linux】VMware17 安装 Ubuntu24.04 虚拟机
目录 安装教程 一、下载 Ubuntu 桌面版iso映像 二、安装 VMware 三、安装 Ubuntu 桌面版 VMware 创建虚拟机 挂载 Ubuntu ISO 安装 Ubuntu 系统 安装教程 一、下载 Ubuntu 桌面版iso映像 链接来自 清华大学开源软件镜像站 ISO文件地址:ubuntu-24.04.2-des…...
