当前位置: 首页 > news >正文

CodeForces-2153D Not Alone

CodeForces-2153D Not Alone

tag: 结论题,一维线性 DP

给定一个环形序列 \(b\),长度为 \(m\),每次操作可以将一个数加一或减一。

问最少需要多少次操作,可以使序列 \(b\) 中每一个元素至少与一个相邻元素相等。

环形序列是指:除了 \(b_i\)\(b_{i+1}\)\(1\le i<m\))相邻,\(b_m\)\(b_1\) 也相邻。\(\sum m\le2\cdot10^5\)

感谢 dbxxx 的帮助。

相当于将序列分组,每组中至少有两个数,执行操作使每组中所有数相等。

先考虑非环形的序列,即忽略 \(b_m\)\(b_1\) 相邻的情况。

结论:每组只包含两个或三个数,可以使答案最优。

感性证明:首先,若已经分组,那么经典的结论是,将这一组中所有数变为它们的中位数,所需操作最少。

对于连续的四个数,从左到右分别为 \(a,b,c,d\),画图理解:

image-20251011172211967

显然右侧的更优(至少不劣)。交换 \(a,b\) 或交换 \(c,d\) 或交换 \((a,b),(c,d)\) 都不影响结果,因此上面已经考虑到了所有情况。

对于连续的五个数,也是同样的道理,但这时应该分为 \((a,b,c),(d,e)\) 还是 \((a,b),(c,d,e)\) 是不确定的,需要分类讨论。

考虑 DP,设 \(f(i)\) 表示将 \(b_1,\cdots,b_i\) 变为合法序列的代价。那么讨论 \((i,i-1)\)\((i,i-1,i-2)\) 为一组,故

\[f(i)=\min\{f(i-2)+R(i-1,i),f(i-3)+R(i-2,i)\}, \]

其中极差 \(R(l,r)=\max\{b_l,\cdots,b_r\}-\min\{b_l,\cdots,b_r\}\)

现在考虑环形序列的情况。环与链的区别只是在于,需要多考虑 \((b_m,b_1),(b_{m-1},b_m,b_1),(b_m,b_1,b_2)\) 这三种分组。

故只需要对 \(b'=(b_2,\cdots,b_{m-1},b_m,b_1)\)\(b''=(b_3,\cdots,b_{m-1},b_m,b_1,b_2)\) 再跑两遍即可。

Submission #343107772 - Codeforces

http://www.jsqmd.com/news/25051/

相关文章:

  • Codeforces Round 1062 (Div. 4)
  • 一文吃透银行账务打通体系闭环 - 智慧园区
  • uups 逻辑合约也增加了升级函数,那总体不是也费gas吗?
  • 【URP】Unity[纹理压缩]算法多平台对比
  • AI元人文构想:三值纠缠模型
  • EDK2环境搭建以及HelloWorld编译实现
  • 谁生?谁死?从引用计数到可达性分析,洞悉GC的决策逻辑
  • P1561 [USACO12JAN] Mountain Climbing S
  • 六、阅读笔记六:保障软件可靠性的防线
  • 五、阅读笔记五 应对复杂系统的挑战
  • P3988 [SHOI2013] 发牌
  • 映射
  • 文件夹显示绿色成功图标方法
  • 正点原子--手把手教你轻松入门C语言及STM32
  • 【RabbitMQ】与ASP.NET Core集成
  • IMO2025 Problem 1
  • Day6综合案例2-注册信息
  • 2014吉林省赛题解 | CCUT应用OJ——Sign in
  • 访答知识库-可以本地使用的知识库
  • 代码大全2 第三四章
  • https代理服务器(六)再次java动态签发【成功】
  • node
  • [AGC032D] Rotation Sort 题解
  • [AGC024E] Sequence Growing Hard 题解
  • 实验2 现代C++编程初体验
  • P7154 [USACO20DEC] Sleeping Cows P 题解
  • Java流程控制——switch多选择结构
  • P3607 [USACO17JAN] Subsequence Reversal P 题解
  • 概率论测试(上)
  • 示性函数2