题解:猫猫 cpu 的缓存

news/2025/3/17 4:41:30/文章来源:https://www.cnblogs.com/A1C3/p/18774392

Problem

给你 \(m\)\(1\)\(n\) 之间的整数,你要找到若干个大小为固定的 \(k\) 的闭区间,使得所有这些数都在你找到的某个区间内。你需要最小化这些区间的并集的大小,并输出此大小。本题里区间或区间并集的大小,被定义为这个区间或区间并集里整数的个数。\(1 \le k \le n \le 10^9, 1 \le m \le 3 \times 10^5\)

Solution

若有两个数为 \(9, 14\),则要用两个区间 \([9, 12]\)\([11, 14]\) 来覆盖,此时这两个区间是有交集的;若有两个数为 \(1, 9\),则要用两个区间 \([1, 4]\)\([6, 9]\) 来覆盖,此时这两个区间没有交集。若干个有交集的区间构成的长段和没有交集的单个段是两种方案,可以发现覆盖数组中的数只有这两种方案。

根据题意,覆盖长度为 \(k\),则要划分两个段只需要判断上一段的结尾与这一段的开头差值是否超过 \(k\) 即可。若差值超过 \(k\),则需要使用这两个数之间的所有数覆盖;若差值不超过 \(k\),直接用 \(k\) 个数覆盖。使用 dp 并两层循环枚举当前数和上一段的结尾,这一段即为 \([j+1, i]\),差值即为 \(a_i - a_{j+1} + 1\)。时间复杂度为 \(O(m^2)\),可以得到 70pts。

70pts

#include <bits/stdc++.h>
using namespace std;
constexpr int N = 3e5 + 7;
int a[N], f[N];
int main() {freopen("cpu.in", "r", stdin);freopen("cpu.out", "w", stdout);int n, k, m;scanf("%d%d%d", &n, &k, &m);for (int i = 1; i <= m; ++i)scanf("%d", a + i);sort(a+1, a+m+1);memset(f, 0x3F, sizeof f);f[0] = 0;for (int i = 1; i <= m; ++i)for (int j = 0; j < i; ++j) {int d = a[i]-a[j+1]+1;f[i] = min(f[i], f[j] + ((d>k) ? d : k));}printf("%d", f[m]);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/899439.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MACD

目录背景和价值用法快线在0轴上方 - 多头较强,否则多头较弱快线上穿慢线 形成金叉,形成多头信号。 快线下穿慢线 形成死叉,形成空头信号顶背离和底背离参考资料 背景和价值 指数平滑移动平均线两个(12和26)均线相交,12EMA上穿26EMA形成金叉,快线从0轴下方上穿0轴上方 用…

python 文件打包成 whl

首先需要安装 wheel, setuptools pip install setuptools wheel简单进行一个打包的例子,项目目录结构如下:# __init__.py def pytest_collection_modifyitems(session, config, items):for item in items:# item.name 用例名称item.name = item.name.encode(utf-8).decode(un…

cmake识别不到vcpkg安装的包的解决(以libssh为例)

承接上篇 vcpkg 跨平台的c/c++库包管理工具(以libssh为例) - 夕西行 - 博客园 vcpkg安装libssh后,vs2022创建的cmake项目竟然不能find_package到libssh 问题出在CMakeLists.txt,注意位置1、2、3的顺序一定不能变cmake_minimum_required (VERSION 3.20)#vcpkg————位置1 …

昆工昆明理工大学冶金最新复试真题及答案

--冶金工程考研809冶金物理化学有色冶金学有色金属冶金冶金过程及设备F002钢铁冶金学冶金调剂

《Transformer自然语言处理实战 : 使用Hugging Face Transformers库构建NLP应用》PDF免费下载

《Transformer自然语言处理实战》聚焦 Hugging Face Transformers 库,系统讲解 Transformer 模型在 NLP 任务中的应用。涵盖文本分类、命名实体识别、机器翻译等核心技术,并提供实践案例,帮助读者快速掌握模型微调与部署。适合 NLP 初学者及希望深入理解 Transformer 的开发…

【论文阅读】maskformer: Per-Pixel Classification is Not All You Need for Semantic Segmentation

标题 Per-Pixel Classification is Not All You Need for Semantic Segmentation (NIPS 2021) 论文:Per-Pixel Classification is Not All You Need for Semantic Segmentation 代码:https://github.com/facebookresearch/MaskFormer 摘要 ​ 现代方法通常将语义分割视为逐…

鸿蒙特效教程04-直播点赞动画效果实现教程

鸿蒙特效教程04-直播点赞动画效果实现教程 在时下流行的直播、短视频等应用中,点赞动画是提升用户体验的重要元素。当用户点击屏幕时,屏幕上会出现飘动的点赞图标,感觉挺好玩的。本教程适合HarmonyOS初学者,通过简单到复杂的步骤,通过HarmonyOS的Canvas组件,一步步实现这…

鸿蒙特效教程02-微信语音录制动画效果实现教程

鸿蒙特效教程02-微信语音录制动画效果实现教程本教程适合HarmonyOS初学者,通过简单到复杂的步骤,一步步实现类似微信APP中的语音录制动画效果。最终效果预览 我们将实现以下功能:长按"按住说话"按钮:显示录音界面和声波动画 录音过程中显示实时时长 手指上滑:取…

SpringBoot使用Kafka生产者、消费者

SpringBoot使用Kafka生产者、消费者@目录依赖配置文件生产者消费者 依赖 <!--kafka--> <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>xxx</version> </depend…

jasperreport 使用和问题记录

引言:之前一直没有记录的习惯,所以在这里记录有些是回忆,所以可能有些不连贯.而且本人的问题不一定是你的问题,仅作参考. (注:本人是使用java生成pdf文件) 1.介绍(只介绍自己用的到) 进入软件 File->new->jasper report->blank A4 我们得到了一张A4纸,如下图所示.(注:…

Java学习四大名著:《Java核心技术 卷II:高级特性(原书第12版)》 | PDF免费下载

《Java核心技术 卷II:高级特性(原书第12版)》是Java学习的经典书籍,该书深入探讨了 Java 语言的高级功能,涵盖流与文件处理、并发编程、网络、数据库、JVM 调优等关键主题。适合有一定基础的开发者,帮助他们掌握高效编程技巧,优化性能,并深入理解 Java 生态系统,是进阶…