1 条题解
-
0
C++ :
#include<algorithm> #include<cstdio> #include<cmath> using namespace std; typedef double flo; const flo pi=acos(-1.); const int N=1<<17; struct vec{flo x,y;}a[N],b[N]; vec operator+(vec a,vec b){return(vec){a.x+b.x,a.y+b.y};} vec operator-(vec a,vec b){return(vec){a.x-b.x,a.y-b.y};} vec operator*(vec a,vec b){return(vec){a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x};} vec*getw(int n,int m){ static vec w[N/2]; w[0].x=1; w[1]=(vec){cos(2*pi/n),sin(2*pi/n)}; for(int i=2;i<m;++i) w[i]=w[i-1]*w[1]; return w; } void fft(vec*c,int n,int d){ for(int i=0,j=0;i<n;++i){ if(i<j) swap(c[i],c[j]); for(int k=n>>1;;k>>=1) if((j^=k)>=k)break; } for(int i=1;i<n;i<<=1){ vec*w=getw(2*i*d,i); for(int j=0;j<n;j+=i<<1){ vec*a=c+j,*b=a+i; for(int k=0;k<i;++k){ vec v=w[k]*b[k]; b[k]=a[k]-v,a[k]=a[k]+v; } } } if(!~d) for(int i=0;i<n;++i) c[i].x/=n; } int main(){ static int n,tmp,s,s2; scanf("%d%*d",&n); for(int i=0;i<n;++i) scanf("%d",&tmp),s+=tmp,s2+=tmp*tmp,a[i].x=tmp; for(int i=n-1;~i;--i) scanf("%d",&tmp),s-=tmp,s2+=tmp*tmp,b[i].x=tmp; int l=4<<__lg(n); fft(a,l,1); fft(b,l,1); for(int i=0;i<l;++i) a[i]=a[i]*b[i]; fft(a,l,-1); int s3=-1e9; for(int i=0;i<n;++i) s3=max(s3,int(a[i].x+a[i+n].x+.5)); int c=round(s/1./n); printf("%d\n",s2-2*s3+c*(n*c-2*s)); }
- 1
信息
- ID
- 1020
- 时间
- 2000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- (无)
- 递交数
- 0
- 已通过
- 0
- 上传者