NOIP 模拟赛:2024-11-27

T1T2 有点无脑了。T3T4 有点抽象了。

T3:

T4:

给定n长度的序列a1,a2,,an。你可以进行下面两种操作

  1. 选择整数i(1in),然后将ai变为ai+2
  2. 选择整数i(1in),然后将ai变为ai1

你的目标是将其变为“特殊等差数列”,这要求存在整数d使得至少有n2个整数i(2in),满足aiai1=d

每一次你可以选择两种操作中的任意一种,求最少的操作总次数以达到目标。n105

草了,一直在差分数组上想。

如果手玩了几组 n=20 的样例,发现 |d| 其实很小。仔细分析可以得到应该有 nd2×106(其实题目数据里 nd2×105)。

这启示我们 O(ndlogn) 是可行的,也就是可以枚举 d 然后 O(nlogn) 检验。

对于固定的 d,只需要决定两个部分的首项是多少。对每个前缀求出最小代价,翻转一下序列再求一遍(其实是对每个后缀求出最小代价),拼起来即可。(能这么做是因为发现一个序列数整体平移或取相反数,答案不变)

考虑令 bi=ai(i1)d,只需要决策点 xbix 的步数和最小即可。容易想到 x 应该取当前前缀排名 23 小的数或其 ±1。用对顶堆维护即可。

posted @   FLY_lai  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示