CF2026
A
题意
有
分析
最小:让开着的开关的两两抵消。
最大:开着的开关先开满,如果还有,剩余的和之前开的两两抵消。注意到抵消完还开着的灯数量等于关着的开关数量。
B
题意
给一个数组
- 每段的长度都是奇数;
每一段的中位数
的中位数等于给定的 。
构造一个划分方案。
分析
注意到条件二的关键只在最中间一段,我们可以让中间的一段只包含
接下来只要对左边右边根据奇偶性分类下就行,若左右奇偶性不相同则无解。全奇数整个作为一段即可,全偶数先分出一个再整个作为一段即可。
还有一些总数较小的边界情况,讨论下也不难。
C
题意
给一个数组
- 对每一个没有相同元素的三元组
, 作为一个三角形的三条边是合法的。
分析
排个序,注意到最容易不合法的地方是
那我们有两种选择:把最小值改大、把最大值改小。
怎么选?我们不妨枚举选了几个把最大值改小。由于我们的更改肯定会一步到位,那改成了什么其实已经无所谓了,反正肯定只花费了一步。
枚举把几个最大值改小之后,可以直接二分出最小值改到了哪里恰好合法。注意到二分出的位置是单调递减的,所以双指针也行。
D
题意
交互题,有一棵
- 如果删除节点
,则树会变成一组链。 - 记
表示 节点的父亲,若 ,则 。 - 节点
的度数为 ,且节点 与节点 相连。
每次询问两个点,交互库返回这两个点之间的简单路径是否包含节点
还原树的最终形态。
分析
首先依次询问
之后的点只需要维护一个指针指向当前测试的父亲节点,双指针移动分别确定即可。
第一部分询问次数为
E
题意
给一个环形数组
- 选一个位置
, 增加 , 增加 , 增加 。
构造一个操作方案,使得
分析
是官方解法。
我们不妨允许“负操作”:选择一个
考虑
我们发现这种操作其实是让原数组有了对称性,接下来我们尝试把这种做法扩展到一般的情况下。
拿官方题解
- 首先,我们平衡
和 。只需对 进行 次操作。数组变为 。 - 然后,我们平衡
和 。我们从 开始,每次向左移动两个(在循环意义下),直到到达 ,每次移动到一个位置就操作 次。也就是说对 和 各操作 次。数组变为: 。
至此数组有了良好的对称性。
一般地,想要平衡
接下来考虑第二步,回到例子,最中间的一个容易与两边平衡,数组变为
接下来对
至此操作结束。考虑如何统计每个位置的操作次数。第一步是一段前缀和一段后缀操作,注意到路径上奇偶性不变,那可以奇数位置和偶数位置分开做前缀和,操作次数就是差值。第二步同理。
别忘了把负的操作数加成非负的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】