Educational Codeforces Round 127 D. Insert a Progression
Insert a Progression
You are given a sequence of n n n integers a 1 , a 2 , … , a n a_1, a_2, \dots, a_n a1,a2,…,an. You are also given x x x integers 1 , 2 , … , x 1, 2, \dots, x 1,2,…,x.
You are asked to insert each of the extra integers into the sequence a a a. Each integer can be inserted at the beginning of the sequence, at the end of the sequence, or between any elements of the sequence.
The score of the resulting sequence a ′ a' a′ is the sum of absolute differences of adjacent elements in it ( ∑ i = 1 n + x − 1 ∣ a i ′ − a i + 1 ′ ∣ ) \left(\sum \limits_{i=1}^{n+x-1} |a'_i - a'_{i+1}|\right) (i=1∑n+x−1∣ai′−ai+1′∣).
What is the smallest possible score of the resulting sequence a ′ a' a′?
Input
The first line contains a single integer t t t ( 1 ≤ t ≤ 1 0 4 1 \le t \le 10^4 1≤t≤104) — the number of testcases.
The first line of each testcase contains two integers n n n and x x x ( 1 ≤ n , x ≤ 2 ⋅ 1 0 5 1 \le n, x \le 2 \cdot 10^5 1≤n,x≤2⋅105) — the length of the sequence and the number of extra integers.
The second line of each testcase contains n n n integers a 1 , a 2 , … , a n a_1, a_2, \dots, a_n a1,a2,…,an ( 1 ≤ a i ≤ 2 ⋅ 1 0 5 1 \le a_i \le 2 \cdot 10^5 1≤ai≤2⋅105).
The sum of n n n over all testcases doesn’t exceed 2 ⋅ 1 0 5 2 \cdot 10^5 2⋅105.
Output
For each testcase, print a single integer — the smallest sum of absolute differences of adjacent elements of the sequence after you insert the extra integers into it.
Example
| i n p u t \tt input input |
|---|
| 4 1 5 10 3 8 7 2 10 10 2 6 1 5 7 3 3 9 10 10 1 4 10 1 3 1 2 |
| o u t p u t \tt output output |
| 9 15 31 13 |
Tutorial
由题意易得,对于数组 a a a 中已有的数不能改变,此时差值为 ∑ i = 1 ∣ a ∣ a b s ( a i − a i − 1 ) \sum_{i = 1}^{|a|}abs(a_i - a_{i - 1}) ∑i=1∣a∣abs(ai−ai−1),其中 ∣ a ∣ |a| ∣a∣ 表示数组 a a a 的长度
在任意两个数 a i a_i ai 和 a i + 1 a_{i + 1} ai+1 之间,满足 a i ≤ x ≤ a i + 1 a_i \le x \le a_{{i + 1}} ai≤x≤ai+1 条件的 x x x 对答案都不会产生影响,因此插入满足 min ( a ) ≤ x ≤ max ( a ) \min(a) \le x \le \max(a) min(a)≤x≤max(a) 条件的 x x x 均不会对答案产生影响,我们只需要考虑小于 min ( a ) \min(a) min(a) 的数和大于 max ( a ) \max(a) max(a) 的数对答案会产生什么影响即可
对于小于 min ( a ) \min(a) min(a) 的数:
- 如果将 1 , 2 , … , min ( a ) − 1 1,2,\dots,\min(a) - 1 1,2,…,min(a)−1 正序插入到整个数列 a a a 的最前方,产生的影响为 a b s ( a 0 − 1 ) abs(a_0 - 1) abs(a0−1)
- 如果将 min ( a ) − 1 , min ( a ) − 2 , … , 2 , 1 \min(a) - 1, \min(a) - 2, \dots, 2, 1 min(a)−1,min(a)−2,…,2,1 倒序插入到整个数列 a a a 的最后方,产生的影响为 a b s ( a ∣ a ∣ − 1 ) abs(a_{|a|} - 1) abs(a∣a∣−1),其中 ∣ a ∣ |a| ∣a∣ 表示数组 a a a 的长度
- 如果将 1 , 2 , … , min ( a ) − 1 1,2,\dots,\min(a) - 1 1,2,…,min(a)−1 按序插入到数组 a a a 中间,产生的影响为 ( min ( a ) − 1 ) × 2 (\min(a) - 1) \times 2 (min(a)−1)×2
对于大于 max ( a ) \max(a) max(a) 的数:
- 如果将 x − 1 , x − 2 , … , max ( a ) + 1 x - 1, x - 2, \dots, \max(a) + 1 x−1,x−2,…,max(a)+1 倒序插入到整个数列 a a a 的最前方,产生的影响为 a b s ( x − a 0 ) abs(x - a_0) abs(x−a0)
- 如果将 max ( a ) + 1 , max ( a ) + 2 , … , x \max(a) + 1,\max(a) + 2,\dots,x max(a)+1,max(a)+2,…,x 正序插入到整个数列 a a a 的最后方,产生的影响为 a b s ( x − a ∣ a ∣ ) abs(x - a_{|a|}) abs(x−a∣a∣),其中 ∣ a ∣ |a| ∣a∣ 表示数组 a a a 的长度
- 如果将 1 , 2 , … , min ( a ) − 1 1,2,\dots,\min(a) - 1 1,2,…,min(a)−1 按序插入到数组 a a a 中间,产生的影响为 ( x − max ( a ) ) × 2 (x - \max(a)) \times 2 (x−max(a))×2,当然,如果 max ( a ) > x \max(a) > x max(a)>x,此时影响为
0
综上所述,对于每一个数组 a a a 和 x x x,答案为
{ ∑ i = 1 ∣ a ∣ a b s ( a i − a i − 1 ) min ( a b s ( x − a 0 ) , a b s ( x − a ∣ a ∣ ) , max ( 0 , ( x − max ( a ) ) × 2 ) ) min ( a b s ( a 0 − 1 ) , a b s ( a ∣ a ∣ − 1 ) , ( min ( a ) − 1 ) × 2 ) \left\{\begin{matrix} \sum_{i = 1}^{|a|}abs(a_i - a_{i - 1}) \\ \min(abs(x - a_0), abs(x - a_{|a|}), \max(0, (x - \max(a)) \times 2)) \\ \min(abs(a_0 - 1), abs(a_{|a|} - 1), (\min(a) - 1) \times 2) \end{matrix}\right. ⎩ ⎨ ⎧∑i=1∣a∣abs(ai−ai−1)min(abs(x−a0),abs(x−a∣a∣),max(0,(x−max(a))×2))min(abs(a0−1),abs(a∣a∣−1),(min(a)−1)×2)
的和
此解法时间复杂度为 O ( n ) \mathcal O(n) O(n),即求 ∑ i = 1 ∣ a ∣ a b s ( a i − a i − 1 ) \sum_{i = 1}^{|a|}abs(a_i - a_{i - 1}) ∑i=1∣a∣abs(ai−ai−1) 时的时间复杂度
Solution
import sys
input = lambda: sys.stdin.readline().strip()output = []for _ in range(int(input())):n, x = map(int, input().split())a = list(map(int, input().split()))ans = sum(abs(a[i] - a[i + 1]) for i in range(n - 1))mx, mn = max(a), min(a)up = min(abs(x - a[0]), abs(x - a[-1]), (0 if mx > x else (x - mx) * 2))down = min(abs(a[0] - 1), abs(a[-1] - 1), (mn - 1) * 2)output.append(ans + up + down)print('\n'.join(map(str, output)))
相关文章:
Educational Codeforces Round 127 D. Insert a Progression
Insert a Progression time limit per test: 2 second memory limit per test: 256 megabytes input: standard input output: standard output You are given a sequence of n n n integers a 1 , a 2 , … , a n a_1, a_2, \dots, a_n a1,a2,…,an. You are also giv…...
树莓集团:构筑全国数字影像生态链
在数字化浪潮席卷全球的今天,数字影像技术正以前所未有的速度改变着我们的生活。成都树莓集团以远见卓识和坚定步伐,专注于全国数字影像生态链的建设,不断推动着文创产业的创新与发展。 树莓集团致力于打造一个完整的数字影像生态链ÿ…...
物联网——TIM定时器、PWM驱动呼吸灯、舵机和直流电机
定时器概念(常用于输出PWM波形,驱动电机) 时间脉冲数时钟周期; 这里的脉冲数6553665536,支持定时器级联,从而延长定时 定时器类型 基本定时器原理图(UI:更新中断, U:更新事件&#…...
Elasticsearch 认证模拟题 -2
一、题目 有一个索引 task3,其中有 fielda,fieldb,fieldc,fielde 现要求对 task3 重建索引,重建后的索引新增一个字段 fieldg 其值是fielda,fieldb,fieldc,fielde 的值拼接而成。 …...
Java-----Comparable接口和Comparator接口
在Java中,我们会经常使用到自定义类,那我们如何进行自定义类的比较呢? 1.Comparable接口 普通数据的比较 int a10;int b91;System.out.println(a<b); 那自定义类型可不可以这样比较呢?看一下代码 我们发现会报错,因为自定义…...
通信技术体会
比如 pcie可以看成是全连接的ahb bus,但又不是。 因为pcie还是axi(神似split/cutthrough)。(axi更多是接口而不是bus)。 pcie虽然物理层和usb都是serdes,但transaction layer就是上面这样的,也就…...
Linux系统安全及其应用
文章目录 一、用户账号安全管理1.1 系统账号的清理1.2 对用户账号的操作1.2.1 锁定和解锁用户1.2.2 删除无用账号 1.3 对重要文件进行锁定1.4 密码安全控制1.4.1 新建用户1.4.2 已有用户 二、历史命令管理2.1 历史命令限制2.2 自动清空历史命令 三、设置终端登录的安全管理3.1 …...
JVM内存划分类加载的过程双亲委派模型的详解
JVM内存划分 JVM也就是java进程,这个进程一旦跑起来就会从操作系统这里申请一大块内存空间,JVM接下来就要进一步的对这个大的空间进行划分,划分成不同区域,从而每个区域都有不同的功能作用,一共分为如下几个区域 1.堆…...
Java异常详解
Java异常详解 前言一、异常类的定义Java异常异常类的构成Java常见运行错误异常示例除以 0数组下标越界访问 null 对象 防御式编程异常的好处LBYL 风格的代码EAFP 风格的代码 二、异常的基本用法捕获异常基本语法代码示例不处理异常使用 try catch 后的程序执行过程catch 只能处…...
C++入门3——类与对象2(类的6个默认成员函数)
目录 1.类的6个默认成员函数 2. 构造函数 2.1 构造函数的概念 2.2 构造函数的特性 3. 析构函数 3.1 析构函数的概念 3.2 析构函数的特性 4.拷贝构造函数 4.1 拷贝构造函数的概念 4.2 拷贝构造函数的特性 5.赋值运算符重载函数 5.1运算符重载函数 5.2 赋值运算符重…...
CobaltStrike基本渗透
目录 CobaltStrike简介 主要功能: 使用注意: 在使用CobaltStrike进行渗透测试时,务必遵守法律法规,并获得合法授权。 CobaltStrike安装 前提 安装 服务端安装 windows安装 CS基本使用 监听器配置 一些基本的攻击…...
【linux深入剖析】进程间通信
🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 1.进程间通信目的2. 什么…...
关系数据库:关系模式
文章目录 基本概述关系的相关名词术语笛卡儿积与关系关系的类型 关系模式总结 基本概述 关系的相关名词术语 关系:简单来说,就是一张二维表格。属性(Attribute):也称字段或列,在现实世界中,要描述一个事务常常取若干…...
医学图像处理质量的评价方法
评判处理后医学图像的质量是确保图像处理技术有效性和可靠性的关键。以下是一些常用的图像质量评估方法和指标: 1. 主观评估 主观评估是由专业人员(如放射科医生)通过视觉检查对图像质量进行评分。常用的主观评估方法包括: 视觉…...
Ehcache Java 缓存框架
详解 下图是 Ehcache 在应用程序中的位置: Ecache 是一个广泛使用的 Java 缓存框架,能够有效提升应用性能,并减少与后端数据库的交互次数。它采用了一系列高级缓存策略,包括内存缓存、磁盘缓存、分布式缓存等,并提供了…...
详解Spring IoCDI(二)
目录 承接上文:详解Spring IoC&DI (一) 1.IoC详解 1.1方法注解Bean 1.2方法注解要配合类注解使用 1.3定义多个对象 1.4重命名Bean 1.5扫描路径 2.DI详解 2.1DI与IoC的关系 2.2属性注入 2.3构造方法注入 2.4Setter注入 2.5 三…...
说明白计算机网络之TCP的流量控制与拥塞控制之慢开始算法与拥塞避免算法
TCP的流量控制 利用滑动窗口实现流量控制 设A向B发送数据,连接建立时候,B告诉A自身的接收窗口大小,A的发送窗口大小不能超过接收方B的窗口大小 流量控制:发送方发送速率不要太快,要让接收方来得及接收。窗口大小的单…...
这款信创FTP软件,可实现安全稳定的文件传输
信创,即信息技术应用创新,2018年以来,受“华为、中兴事件”影响,国家将信创产业纳入国家战略,并提出了“28n”发展体系。“8”具体指金融、石油、电力、电信、交通、航空航天、医院、教育等主要行业。目前企业使用比较…...
代码随想录算法训练营第十天|232.用栈实现队列、225. 用队列实现栈
232.用栈实现队列 题目链接:232. 用栈实现队列 文档讲解:代码随想录 状态:写出来 ,但差强人意 思路: 定义两个容器,可以是Stack,也可以是Deque,stackIn相当于临时容器,用来存放元素&…...
STM32 IIC协议
本文代码使用 HAL 库。 文章目录 前言一、什么是IIC协议二、IIC信号三、IIC协议的通讯时序1. 写操作2. 读操作 四、上拉电阻作用总结 前言 从这篇文章开始为大家介绍一些通信协议,包括 UART,SPI,IIC等。 UART串口通讯协议 SPI通信协议 一、…...
从零到一:Android Studio集成Uniapp离线SDK打包实战
1. 环境准备:工具选择与版本匹配 第一次接触Uniapp离线打包时,最让我头疼的就是工具版本匹配问题。记得去年接手一个混合开发项目时,因为HBuilderX和SDK版本不兼容,整整浪费了两天时间排查问题。为了避免大家重蹈覆辙,…...
深度解析Scarab:空洞骑士模组管理器的专业实现与架构设计
深度解析Scarab:空洞骑士模组管理器的专业实现与架构设计 【免费下载链接】Scarab An installer for Hollow Knight mods written with Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab 空洞骑士模组管理器Scarab为玩家提供了高效、专业的模组…...
【限时公开】后印象派专属--ar 16:9 --style raw --stylize 800参数组合包(含塞尚构图/修拉点彩/劳特累克动态线共12套已验证prompt模板)
更多请点击: https://intelliparadigm.com 第一章:后印象派艺术精神与Midjourney风格迁移的本质逻辑 后印象派并非对印象派的简单延续,而是对主观表达、结构重构与象征张力的自觉回归——梵高旋转的星云、塞尚凝练的几何体、高更原始的色域&…...
NVIDIA Profile Inspector完整指南:200+隐藏设置解锁显卡极致性能
NVIDIA Profile Inspector完整指南:200隐藏设置解锁显卡极致性能 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector 还在为游戏画面撕裂、输入延迟过高而烦恼吗?想要彻底掌控NVIDIA…...
深度学习图像风格迁移:从Gatys算法到PyTorch工程实践
1. 项目概述:一个基于深度学习的图像风格迁移应用最近在GitHub上闲逛,发现了一个名为“aristoapp/DDalkkak”的项目。单看这个名字,可能有点摸不着头脑,但点进去一看,发现这是一个关于图像风格迁移(Image S…...
Switch便携投影底座DIY:3D打印与硬件改造实战指南
1. 项目概述:当Switch遇上投影,一场桌面上的大屏革命作为一个折腾过不少游戏机外设的玩家,我一直在想,有没有办法让Switch的“便携”属性再进化一步?官方底座接电视固然爽,但总被一根线缆束缚在客厅。直到我…...
MCP服务器自动发现与管理工具mcpfinder详解
1. 项目概述:一个用于发现与管理MCP服务器的工具如果你正在构建或使用基于模型上下文协议(Model Context Protocol, 简称MCP)的应用,那么你很可能遇到过这样的困扰:手头有几个不同功能的MCP服务器ÿ…...
TPU材料3D打印iPad Pro保护框:从设计到成品的完整实践指南
1. 项目概述:为什么选择TPU为iPad Pro打造专属保护框?作为一名折腾过几十公斤耗材的3D打印老玩家,我始终认为,这项技术最迷人的地方不在于复刻网上的模型,而在于为手头的心爱之物量身定制解决方案。就拿我手边的这台iP…...
基于MCP协议构建Reddit社区趋势分析工具:架构、部署与应用
1. 项目概述:一个实时洞察社区脉搏的利器最近在做一个社区运营相关的项目,需要实时追踪几个特定话题在Reddit上的讨论热度变化。手动刷帖、统计关键词频率这种笨办法效率太低,而且很难量化趋势。就在我琢磨着是不是要自己写个爬虫加分析脚本的…...
基于ESP32-S2与MAX17048的物联网电池监控系统设计与实现
1. 项目概述与核心价值 对于任何一个需要长期部署在户外的物联网设备,比如环境监测站、智能农业传感器或者远程摄像头,最让人头疼的问题往往不是代码bug,而是“它什么时候会没电?”。你不可能天天跑现场去检查,而设备…...
