zoukankan      html  css  js  c++  java
  • 笔记-[AH2017/HNOI2017]礼物

    笔记-[AH2017/HNOI2017]礼物

    [AH2017/HNOI2017]礼物


    [egin{split} ans_i=&sum_{j=1}^n(a_j-b_j+i)^2\ =&sum_{j=1}^n(a_j^2+b_j^2+i^2-2a_jb_j+2ia_j-2ib_j)\ =&sum_{j=1}^na_j^2+sum_{j=1}^nb_j^2+ni^2+2isum_{j=1}^na_j-2isum_{j=1}^nb_j-2sum_{j=1}^na_jb_j\ end{split} ]


    #include <bits/stdc++.h>
    using namespace std;
    
    //Start
    #define lng long long
    #define db double
    #define mk make_pair
    #define pb push_back
    #define fi first
    #define se second
    #define rz resize
    const int inf=0x3f3f3f3f;
    const lng INF=0x3f3f3f3f3f3f3f3f;
    
    //Data
    const int N=3e5;
    int n,m;
    lng sa,saa,sb,sbb,sab[N+7],ans=INF;
    
    //FFT
    const db Pi=acos(-1);
    typedef pair<db,db> cp;
    cp operator+(const cp a,const cp b){return mk(a.fi+b.fi,a.se+b.se);}
    cp operator-(const cp a,const cp b){return mk(a.fi-b.fi,a.se-b.se);}
    cp operator*(const cp a,const cp b){return mk(a.fi*b.fi-a.se*b.se,a.fi*b.se+a.se*b.fi);}
    vector<cp> a(N+7),b(N+7);
    int lim=1,ln,r[N+7];
    void FFT(vector<cp>&f,int t){
    	for(int i=0;i<lim;i++)if(i<r[i]) swap(f[i],f[r[i]]);
    	for(int mid=1;mid<lim;mid<<=1){
    		cp wn(mk(cos(Pi/mid),sin(Pi/mid)*t));
    		for(int j=0;j<lim;j+=(mid<<1)){
    			cp w(mk(1,0));
    			for(int k=j;k<mid+j;w=w*wn,k++){
    				cp x(f[k]),y(w*f[mid+k]);
    				f[k]=x+y,f[mid+k]=x-y;
    			}
    		}
    	}
    }
    
    //Main
    int main(){
    	scanf("%d%d",&n,&m);
    	for(int i=1,x;i<=n;i++)
    		scanf("%d",&x),a[n+i].fi=a[i].fi=x,sa+=x,saa+=1ll*x*x;
    	for(int i=1,x;i<=n;i++)
    		scanf("%d",&x),b[n+1-i].fi=x,sb+=x,sbb+=1ll*x*x;
    	while(lim<=((n<<1)+n)) lim<<=1,ln++;
    	for(int i=0;i<lim;i++) r[i]=(r[i>>1]>>1)|((i&1)<<(ln-1));
    	FFT(a,1),FFT(b,1);
    	for(int i=0;i<lim;i++) a[i]=a[i]*b[i];
    	FFT(a,-1);
    	for(int i=0;i<lim;i++) sab[i]=a[i].fi/lim+0.5;
    	for(int i=1;i<=n;i++)
    		for(int j=-m;j<=m;j++)
    			ans=min(ans,saa+sbb+n*j*j+2ll*j*sa-2ll*j*sb-2ll*sab[i+n]);
    	printf("%lld
    ",ans);
    	return 0;
    }
    
  • 相关阅读:
    day08作业
    Python进制之间的转换
    day07作业
    Python之深浅拷贝详解
    day06作业
    Python流程控制-循环语句for、while
    Python条件语句-if
    Python变量类型之可变/不可变类型
    Cross platform
    Windows version PE System Key
  • 原文地址:https://www.cnblogs.com/George1123/p/12802464.html
Copyright © 2011-2022 走看看