[Hnoi2017]礼物

传送门:https://www.luogu.com.cn/problem/P3723

解题思路

先化简式子,$ Ans=\sum_{i=1}^n (a_i+b_{i+x}+k)^2=\sum a_{i}^2 + \sum b_{i}^2 + nk^2+\sum (a_{i}-b_{i}) * k - \sum a_{i}b_{i+x} $

前面的两个平方的和O(n)直接算,中间的直接二次函数找极值即可(不过若极点的横坐标是负数的话注意四舍五入的方法,负数的取整是会向上取的,例如printf("%d",-7.8)就会输出-7),最后的看上去是一个卷积的形式,考虑FFT,$a_{i}和b_{i+x}的下标相差x$,容易想到翻转a数组,然后直接FFT即可

不要忘记倍长下b数组

posted @ 2020-04-21 13:47  niolle  阅读(106)  评论(0编辑  收藏  举报