题目:
给定数列 a,b,b 可以循环移动,选择整数 c,求 n∑i=1(ai−bi+c)2最小值。
1≤n≤50000, 1≤ai≤m≤100
题解:
把题目的式子拆一下,得
n∑i=1(ai−bi+c)2=n∑i=1(ai−bi)2+c2+2c(ai−bi)=n∑i=1a2i+b2i−2aibi+c2+2aic−2bic=n∑i=1a2i+n∑i=1b2i−2n∑i=1aibi+nc2+2cn∑i=1(ai−bi)
对于 $ \sum\limits_{i=1}na_i2+\sum\limits_{i=1}nb_i2$ 显然为定值,预处理即可。
而 $ nc2+2c\sum\limits_{i=1}n(a_i-b_i)$ 可以看成是一个关于 c 的二次函数,不妨设 y=(n∑i=1ai−n∑i=1bi),
则 min(nc2+2cn∑i=1(ai−bi)) 在 c=−yn 时取得。
又因为 c 为整数,所以 c=⌊−kn⌋ 或 ⌈−kn⌉,将两者带入取 min 即可。
所以此时式子只剩下中间的 n∑i=1aibi,将它最大化。
将 a 给反转一下,所以得
n∑i=1an−ibi
然后对这个做卷积。
本文作者:trsins
本文链接:https://www.cnblogs.com/trsins/p/15776603.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步