传送门

fftfftfft菜题。

题意简述:给一个数列aia_iai​,对于i=1→ni=1\rightarrow ni=1→n求出ansi=∑i&lt;jai(i−j)2−∑i&gt;jai(i−j)2ans_i=\sum_{i&lt;j}\frac{a_i}{(i-j)^2}-\sum_{i&gt;j}\frac{a_i}{(i-j)^2}ansi​=∑i<j​(i−j)2ai​​−∑i>j​(i−j)2ai​​


思路:

考虑分开求减号前后的两组和。

前面的直接是一个卷积的形式,后面的可以把aaa数组翻转一下也是一个卷积的形式,然后上fftfftfft求即可。

代码:

#include<bits/stdc++.h>
#define ri register int
using namespace std;
const double pi=acos(-1.0);
const int N=1e5+5;
struct cp{
    double x,y;
    cp(double _x=0,double _y=0):x(_x),y(_y){}
    friend inline cp operator+(const cp&a,const cp&b){return cp(a.x+b.x,a.y+b.y);}
    friend inline cp operator-(const cp&a,const cp&b){return cp(a.x-b.x,a.y-b.y);}
    friend inline cp operator*(const cp&a,const cp&b){return cp(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);}
    friend inline cp operator/(const cp&a,const double&b){return cp(a.x/b,a.y/b);}
}a[N];
vector<int>pos;
vector<cp>A,B;
int lim,tim,n;
inline void init(const int&up){
    lim=1,tim=0;
    while(lim<=up)lim<<=1,++tim;
    pos.resize(lim),A.resize(lim),B.resize(lim),pos[0]=0;
    for(ri i=0;i<lim;++i)pos[i]=(pos[i>>1]>>1)|((i&1)<<(tim-1));
}
inline void fft(vector<cp>&a,const int&type){
    for(ri i=0;i<lim;++i)if(i<pos[i])swap(a[i],a[pos[i]]);
    cp wn,w,a0,a1;
    for(ri mid=1;mid<lim;mid<<=1){
        wn=cp(cos(pi/mid),sin(pi/mid)*type);
        for(ri j=0,len=mid<<1;j<lim;j+=len){
            w=cp(1,0);
            for(ri k=0;k<mid;++k,w=w*wn)a0=a[j+k],a1=w*a[j+k+mid],a[j+k]=a0+a1,a[j+k+mid]=a0-a1;
        }
    }
    if(type==-1)for(ri i=0;i<lim;++i)a[i]=a[i]/lim;
}
struct poly{
    vector<cp>a;
    poly(int k=0,cp x=cp(0,0)){a.resize(k+1),a[k]=x;}
    inline cp&operator[](const int&k){return a[k];}
    inline const cp&operator[](const int&k)const{return a[k];}
    inline int deg()const{return a.size()-1;}
    inline poly extend(const int&k){poly ret=*this;return ret.a.resize(k+1),ret;}
    friend inline poly operator*(const poly&a,const poly&b){
        int n=a.deg(),m=b.deg();
        init(n+m);
        for(ri i=0;i<=n;++i)A[i]=a[i];
        for(ri i=0;i<=m;++i)B[i]=b[i];
        for(ri i=n+1;i<lim;++i)A[i]=cp(0,0);
        for(ri i=m+1;i<lim;++i)B[i]=cp(0,0);
        fft(A,1),fft(B,1);
        for(ri i=0;i<lim;++i)A[i]=A[i]*B[i];
        poly ret;
        return fft(A,-1),ret.a=A,ret;
    }
}X,Y;
double ans[2][N];
inline void solve(int type){
    poly X(n),Y(n);
    X[0]=Y[0]=cp(0,0);
    for(ri i=1;i<=n;++i)X[i]=a[i],Y[i]=cp(1.0/(double)i/(double)i,0);
    X=(X*Y).extend(n);
    for(ri i=1;i<=n;++i)ans[type][i]=X[i].x;
}
int main(){
    scanf("%d",&n);
    for(ri i=1;i<=n;++i)scanf("%lf",&a[i].x);
    solve(1),reverse(a+1,a+n+1),solve(0),reverse(ans[0]+1,ans[0]+n+1);
    for(ri i=1;i<=n;++i)printf("%.3lf\n",ans[1][i]-ans[0][i]);
    return 0;
}

2019.02.28 bzoj3527: [Zjoi2014]力(fft)的更多相关文章

  1. bzoj3527: [Zjoi2014]力 fft

    bzoj3527: [Zjoi2014]力 fft 链接 bzoj 思路 但是我们求得是 \(\sum\limits _{i<j} \frac{q_i}{(i-j)^2}-\sum_{i> ...

  2. [BZOJ3527][ZJOI2014]力 FFT+数学

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3527 首先卷积的形式是$h(i)=\sum_{i=0}^jf(i)g(i-j)$,如果我们 ...

  3. BZOJ3527[Zjoi2014]力——FFT

    题目描述 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. 输入 第一行一个整数n. 接下来n行每行输入一个数,第i行表示qi. n≤100000,0<qi<100000 ...

  4. 梦想MxWeb3D协同设计平台 2019.02.28更新

    梦想MxWeb3D协同设计平台 2019.02.28更新 SDK开发包下载地址: http://www.mxdraw.com/ndetail_10130.html 在线演示网址: http://www ...

  5. [bzoj3527][Zjoi2014]力_FFT

    力 bzoj-3527 Zjoi-2014 题目大意:给定长度为$n$的$q$序列,定义$F_i=\sum\limits_{i<j}\frac{q_iq_j}{(i-j)^2}-\sum\lim ...

  6. 【BZOJ-3527】力 FFT

    3527: [Zjoi2014]力 Time Limit: 30 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 1544  Solved: 89 ...

  7. 【BZOJ】3527: [Zjoi2014]力 FFT

    [参考]「ZJOI2014」力 - FFT by menci [算法]FFT处理卷积 [题解]将式子代入后,化为Ej=Aj-Bj. Aj=Σqi*[1/(i-j)^2],i=1~j-1. 令f(i)= ...

  8. P3338 [ZJOI2014]力(FFT)

    题目 P3338 [ZJOI2014]力 做法 普通卷积形式为:\(c_k=\sum\limits_{i=1}^ka_ib_{k-i}\) 其实一般我们都是用\(i=0\)开始的,但这题比较特殊,忽略 ...

  9. 【bzoj3527】[Zjoi2014]力 FFT

    2016-06-01  21:36:44 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3527 我就是一个大傻叉 微笑脸 #include&l ...

随机推荐

  1. django模型系统(三)

    1,自定义主键字段的创建 AutoFiled(pirmary_key=True)  # 一般不会自定义 2,order_by  asc  desc 表关系 OneToOne student = mod ...

  2. python:数据类型list

    一.列表list list是python中基础的数据类型之一,它是以[ ]括起来,每个元素以逗号隔开,而且他里面可以存放各种数据类型 li = ['alex', 123, True, (1, 2, 3 ...

  3. Ajax传递json数据简介和一个需要注意的小问题

    Ajax传递json数据 Ajax操作与json数据格式在实际中的运用十分广泛,本文为大家介绍一个两者相结合的小案例: 项目结构 我们新建一个Django项目,在里面创建一个名为app01的应用: p ...

  4. 20165312 2017-2018-2 《JAVA程序设计》第6周学习总结

    20165312 2017-2018-2 <JAVA程序设计>第6周学习总结 一.在本周学习过程中遇到的问题以及对上周测试的查漏补缺 编写110页代码时出现问题,主类Test中创建CPU对 ...

  5. java面试多线程问题

    Java多线程面试问题 1. 进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用.而线程是在进程中执行的一个任务.Java运行环 ...

  6. 【FZSZ2017暑假提高组Day1】确定小组

    [问题描述] 有n个人坐成一排,这n个人都在某一个小组中,同一个小组的所有人所坐的位置一定是连续的. 有一个记者在现场进行采访,他每次采访都会询问一个人其所在的小组有多少人,被询问的每个人都给出了正确 ...

  7. RGB颜色值转化为long 型数字

    通常我们表达颜色都是使用RGB值表示的,今天在VB中设置RGB值居然是一个整形数字,网上各种搜资料发现这个数字是怎么来的: 数值= 65536*Blue + 256* Green + Red

  8. BerOS File Suggestion(字符串匹配map)

    BerOS File Suggestion(stl-map应用) Polycarp is working on a new operating system called BerOS. He asks ...

  9. ArcGIS自定义脚本-通过txt/excel/dbf/table生成多边形要素类

    ArcGIS自定义脚本-通过txt/excel/dbf/table生成多边形要素类 联系方式:谢老师,135-4855-4328,xiexiaokui#qq.com 目的:读取文本文件,常见多边形要素 ...

  10. Unity与安卓IOS交互

    记录下  安卓与Unity交互中  跳坑  找到的资料. <1>建立交互 http://blog.csdn.net/lizhengwei1989/article/details/54631 ...