zoukankan      html  css  js  c++  java
  • 笔记-[ZJOI2014]力

    [ZJOI2014]力


    [egin{split} E_j=&sum_{i=1}^{j-1}frac{q_i}{(i-j)^2}-sum_{i=j+1}^{n}frac{q_i}{(i-j)^2}\ =&sum_{i=1}^{j}frac{q_i}{(i-j)^2}-sum_{i=j}^{n}frac{q_i}{(i-j)^2}\ end{split}\ egin{cases} f_i=q_i\ g_i=frac 1{i^2}\ end{cases} Rightarrow ansa_i=sum_{j+k=i}f_jcdot g_k\ egin{cases} f_i=q_{n-i+1}\ g_i=frac 1{i^2}\ end{cases} Rightarrow ansb_i=sum_{j+k=i}f_jcdot g_k\ ans_i=ansa_i-ansb_{n+1-i}\ ]


    #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=4e5;
    int n;
    
    //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),c(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",&n);
    	for(int i=1;i<=n;i++){
    		scanf("%lf",&a[i].fi);
    		b[n+1-i].fi=a[i].fi;
    		c[i].fi=1.0/db(i)/db(i);
    	}
    	while(lim<=(n<<1)) 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),FFT(c,1);
    	for(int i=0;i<lim;i++) a[i]=a[i]*c[i],b[i]=b[i]*c[i];
    	FFT(a,-1),FFT(b,-1);
    	for(int i=0;i<lim;i++) a[i].fi/=lim,b[i].fi/=lim;
    	for(int i=1;i<=n;i++) printf("%.7lf
    ",a[i].fi-b[n+1-i].fi);
    	return 0;
    }
    
  • 相关阅读:
    同样功能的SQL语句,写成参数和写成常量怎么效率会有那么大的差别
    遭遇钓鱼网站
    SQL Server 2005与Oracle同步注意NUMBER类型转换
    Oracle数据类型(转)
    如何使用枚举的组合值
    社保,交得越多亏得越多(转)
    使用OPENXML函数将XML文档转换为行结果集
    发布一个性能测试工具的破解补丁
    如何将SQLServer2005中的数据同步到Oracle中
    Repository模式
  • 原文地址:https://www.cnblogs.com/George1123/p/12796888.html
Copyright © 2011-2022 走看看