【做题记录】AHOI/HNOI2017 礼物

  • \(\text{AHOI/HNOI2017}\)】礼物

    • 算法:\(\text{FFT}\)

题目:

给定数列 \(a,b\)\(b\) 可以循环移动,选择整数 \(c\),求 \(\large \sum\limits_{i=1}^n(a_i-b_i+c)^2\)最小值。

\(1 \le n \le 50000\), \(1 \le a_i \le m \le 100\)

题解:

把题目的式子拆一下,得

\[\begin{aligned}\sum_{i=1}^n(a_i-b_i+c)^2 & = \sum_{i=1}^n(a_i-b_i)^2+c^2+2c(a_i-b_i) \\ & = \sum_{i=1}^n a_i^2+b_i^2-2a_ib_i+c^2+2a_ic-2b_ic \\ &= \sum_{i=1}^na_i^2+\sum_{i=1}^nb_i^2-2\sum_{i=1}^na_ib_i+nc^2+2c\sum_{i=1}^n(a_i-b_i)\end{aligned} \]

对于 $ \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=(\sum\limits_{i=1}^{n}a_i-\sum\limits_{i=1}^{n}b_i)\)

\(\min (nc^2+2c\sum\limits_{i=1}^n(a_i-b_i))\)\(c=-\dfrac{y}{n}\) 时取得。

又因为 \(c\) 为整数,所以 \(c=\lfloor -\dfrac{k}{n}\rfloor\)\(\lceil -\frac{k}{n}\rceil\),将两者带入取 \(\min\) 即可。

所以此时式子只剩下中间的 \(\sum\limits_{i=1}^na_ib_i\),将它最大化。

\(a\) 给反转一下,所以得

\[\sum_{i=1}^{n}a_{n-i}b_i \]

然后对这个做卷积。

posted @ 2022-01-07 19:32  trsins  阅读(30)  评论(0编辑  收藏  举报