【做题记录】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
\]
然后对这个做卷积。