https://www.lydsy.com/JudgeOnline/problem.php?id=4827

https://www.luogu.org/problemnew/show/P3723

题面见原题。

参考了洛谷一些题解。

先推式子,x数组为a,y数组为b,将b数组倍长后有:

因为c的范围在[-m,m]之间,而m=100,且稍加思考后发现k在1,3,4项中是无用的,所以通过枚举c取得1,3,4项和的最小值。

考虑计算第二项,其实是卷积型,实际上将a数组前移并倒转即可得到:

变成了卷积,FFT即可O(nlogn),本题结束。

(PS:防止我以后看不懂写点东西)

(从n-1枚举到FFT的长度,在之间取得最大值即可)

(至于为什么k可以被忽略,是因为当长度大于n-1时b[k]之前的项相当于乘了个0所以没事。)

(当然我写的时候发现答案对了就交了结果就阴差阳错的AC了:) )

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cctype>
#include<cstdio>
#include<queue>
#include<cmath>
using namespace std;
typedef long double dl;
typedef long long ll;
const dl pi=acos(-1.0);
const int N=2e6+;
inline int read(){
int X=,w=;char ch=;
while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
while(isdigit(ch))X=(X<<)+(X<<)+(ch^),ch=getchar();
return w?-X:X;
}
struct complex{//定义复数
dl x,y;
complex(dl xx=0.0,dl yy=0.0){
x=xx;y=yy;
}
complex operator +(const complex &b)const{
return complex(x+b.x,y+b.y);
}
complex operator -(const complex &b)const{
return complex(x-b.x,y-b.y);
}
complex operator *(const complex &b)const{
return complex(x*b.x-y*b.y,x*b.y+y*b.x);
}
};
void FFT(complex a[],int n,int on){
for(int i=,j=n>>;i<n-;i++){
if(i<j)swap(a[i],a[j]);
int k=n>>;
while(j>=k){j-=k;k>>=;}
if(j<k)j+=k;
}
for(int i=;i<=n;i<<=){
complex res(cos(-on**pi/i),sin(-on**pi/i));
for(int j=;j<n;j+=i){
complex w(,);
for(int k=j;k<j+i/;k++){
complex u=a[k],t=w*a[k+i/];
a[k]=u+t;
a[k+i/]=u-t;
w=w*res;
}
}
}
if(on==-)
for(int i=;i<n;i++)a[i].x/=n;
}
complex a[N],b[N];
int n,m;
ll t1=,t2=,t3=,t4=;
inline ll suan(int c){
return (ll)n*c*c+*(t3-t4)*c;
}
int main(){
n=read(),m=read();
for(int i=n-;i>=;i--)a[i].x=read();
for(int i=;i<n;i++)b[i].x=read();
for(int i=;i<n;i++){
t1+=a[i].x*a[i].x;t2+=b[i].x*b[i].x;
t3+=a[i].x;t4+=b[i].x;
} for(int i=n;i<*n;i++)b[i]=b[i-n];
int k=;while(k<n*)k<<=;
FFT(a,k,);FFT(b,k,);
for(int i=;i<k;i++)a[i]=a[i]*b[i];
FFT(a,k,-); ll maxn=,minn=1e18;
for(int i=n-;i<k;i++)maxn=max(maxn,(ll)(a[i].x+0.5));
for(int i=-m;i<=m;i++)
if(suan(i)<minn)minn=suan(i);
printf("%lld\n",t1+t2-*maxn+minn);
return ;
}

+++++++++++++++++++++++++++++++++++++++++++

+本文作者:luyouqi233。               +

+欢迎访问我的博客:http://www.cnblogs.com/luyouqi233/ +

+++++++++++++++++++++++++++++++++++++++++++

最新文章

  1. metaprogramming笔记
  2. PHP代码审计】 那些年我们一起挖掘SQL注入 - 1.什么都没过滤的入门情况
  3. jQuery.validate errorPlacement
  4. IE浏览器中设为首页
  5. COJN 0575 800601滑雪
  6. (转)html5 Placeholder属性兼容IE6、7方法
  7. linux下文件搜索
  8. PAT 团体程序设计天梯赛-练习集 L1-003. 个位数统计
  9. Vulkan Tutorial 11 Shader modules
  10. LeetCode 74. Search a 2D Matrix(搜索二维矩阵)
  11. C程序设计-----第1次作业
  12. chrome浏览器不兼容jQuery Mobile问题解决
  13. 《ZeroC Ice 权威指南》笔记
  14. git克隆github上的代码(整个分支),并使用vs code上传到github
  15. java获取当前日期所在的周的周一,并以周一为一周开始
  16. BZOJ1449[JSOI2009]球队收益&amp;BZOJ2895球队预算——最小费用最大流
  17. linux之目录知识
  18. js 中三元运算符的运用
  19. 后台返回数据判断是http还是后台本地图片 indexOf
  20. 线性判别分析LDA详解

热门文章

  1. 【JUC源码解析】AQS
  2. centos7系统配置系统用户基于ssh的google身份验证
  3. Jquery获取DOM绑定事件
  4. python操作符及其循环语句(非常全)
  5. JavaScript写的一个带AI的井字棋
  6. Jedis 与 MySQL的连接线程安全问题
  7. AC 自动机——多模式串匹配
  8. WCF服务库创建-20140919
  9. HDU 3260/POJ 3827 Facer is learning to swim(DP+搜索)(2009 Asia Ningbo Regional)
  10. vue.js学习之 跨域请求代理与axios传参