BZOJ 4827 [Hnoi2017]礼物 FFT

题目大意

给出两个序列 a b 。定义两个序列的差异值为 i = 1 n ( a i b i ) 2 。你可以对任意一个序列做如下两个操作。
1. 把序列首尾相接,然后从某个位置断开(即旋转)。
2. 给某个序列整体加上 c
A B 最小的差异值。

题解

设差异值为 f ,则序列 a b 的差异值 f = i = 1 n ( a i b i ) 2
则加上 c 后的差异值 f = i = 1 n ( a i + c b i ) 2
可得: f f = i = 1 n [ ( a i 2 + 2 a i b i + b i 2 ) ( a i 2 + b i 2 + 2 a i c 2 b i c 2 a i b i + c 2 ) ]
= i = 1 n 2 a i c 2 b i c + c 2
= i = 1 n ( 2 a i 2 b i + c ) × c
= 2 ( i = 1 n a i i = 1 n b i ) c + n c 2
既然要尽量接近,那就肯定要把差异均摊开。即让 c = i = 1 n ( a i b i ) n

猜你喜欢

转载自blog.csdn.net/linjiayang2016/article/details/81629169
今日推荐