CF1654E Arithmetic Operations 题解

CF1654E

  • 给定一个长度为 n 的序列 a
  • 问至少需要修改几个数才能使得 a 变为一个等差数列。
  • n1051ai105
  • 我们可以发现值域 105 实属可疑,我们可以就这点进行分析

  • 考虑对于序列的公差 d,如果 d 太大的话经过若干轮就会超过原数的值域,之后的所有数都一定会被修改

  • 因此我们可以对 d 进行根号分治

    • dn 时,我们设当前从 ai 开始,那么有 a0=aii×d,那我们可以枚举 di, 把 a0 放到桶中求众数

    • d>n 时,原序列中的数 n 个。我们枚举首项 ai,则有 aii×d=ajj×d,移向整理得 d=aiajij,那么我们就枚举首项 ai 和向后枚举 n 个数,求 aiajij 的众数即可

  • 最终复杂度 O(nn)

posted @   FOX_konata  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
点击右上角即可分享
微信分享提示