题目背景有些……………
通过题目我们可以知道最终我们要求的式子就是:
n∑i=1(ai+c−bi)2
于是我们将式子拆开:
(ai+c−bi)2=a2i+b2i+c2+2aic−2bic−2aibi
n∑i=1(ai+c−bi)2=n∑i=1a2i+n∑i=1b2i+nc2+2c(n∑i=1ai−n∑i=1bi)−2n∑i=1aibi
前面的这些都很容易求出,但是最后的 ∑ni=1aibi 无法很快算出,我们算答案的时候枚举 c 以及手环旋转了多少,这个时候如果在里面直接大力计算 ∑ni=1aibi 可以拿到 30 分。如果将这个式子在之前拿出来预处理一下,将会拿到 70 分。
这个时候将 ai 反向,式子变为:∑ni=1an−i+1bi ,可以发现这是一个卷积,是可以用 FFT 跑的,众所周知 FFT 的复杂度是 O(nlogn) ,是能跑过的。
具体实现的时候我们需要将 a 拉成两倍长,或者说是断环为链?至于为什么的话,是因为题目要求了这个数列是可以旋转的。然后按照上式将 b 反向就好了。
0 条评论