题目链接:

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

题目:

给出$n$个数$q_i$,令$F_j=\sum_{i<j}\frac{q_iq_j}{(i-j)^2}-\sum_{i>j}\frac{q_iq_j}{(i-j)^2}$,$E_i=\frac{F_i}{q_i}$,求$E_i$

题解:

显然$E_j=\sum_{i=1}^{j-1}\frac{q_i}{(i-j)^2}-\sum_{i=j+1}^{n}\frac{q_i}{(i-j)^2}$

不妨设$G_i=\frac{1}{i^2},G_0=0$,$T_i=q_i,T_0=0$

那么$E_j=\sum_{i=1}^{j-1}T_iG_{i-j}-\sum_{i=j+1}^{n}T_iG_{i-j}$

=$\sum_{i=0}^{j}T_iG_{i-j}-\sum_{i=j+1}^{n}T_iG_{i-j}$

显然减号前的部分是一个卷积的形式,是把$T​$和$G​$卷起来的第$i​$项

设$W_i=T_{n-i+1}(1<=i<=n),W_0=0$

减号后的$=\sum_{i=j+1}^nW_{n-i+1}G_{i-j}$

$=\sum_{i=1}^{n-j}W_iG_{n+1-i-j}$

=$\sum_{i=0}^{n-j+1}W_iG_{n+1-i-j}$

这显然也是一个卷积的形式,是把$W$和$G$卷起来的第$n+1-j$项

$E_j=\sum_{i=0}^{j}T_iG_{i-j}-\sum_{i=0}^{n-j+1}W_iG_{n+1-i-j}$

代码:

#include<algorithm>
#include<cstring>
#include<cstdio>
#include<iostream>
#include<cmath>
using namespace std;
typedef double db; const int N=4e5+;
const double pi=acos(-1.0);
struct complex
{
double x,y;
complex (double xx=,double yy=) {x=xx;y=yy;}
}A[N],B[N];
complex operator + (complex a,complex b) {return complex(a.x+b.x,a.y+b.y);}
complex operator - (complex a,complex b) {return complex(a.x-b.x,a.y-b.y);}
complex operator * (complex a,complex b) {return complex(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);}
int n;
int r[N<<];
void fft(int limit,complex *a,int type)
{
for (int i=;i<limit;i++) if (i<r[i]) swap(a[i],a[r[i]]);
for (int len=;len<limit;len<<=)
{
complex wn=complex(cos(pi/len),type*sin(pi/len));
for (int k=;k<limit;k+=(len<<))
{
complex w=complex(,);
for (int l=;l<len;l++,w=w*wn)
{
complex Nx=a[k+l],Ny=w*a[k+l+len];
a[k+l]=Nx+Ny;
a[k+l+len]=Nx-Ny;
}
}
}
}
void work(db *a,db *b,db *c)
{
int limit=,l=;
while (limit<n+n) limit<<=,++l;
for (int i=;i<=limit;i++) r[i]=(r[i>>]>>)|((i&)<<(l-));
for (int i=;i<=limit;i++) A[i].x=a[i],B[i].x=b[i],A[i].y=,B[i].y=;
fft(limit,A,);fft(limit,B,);
for (int i=;i<=limit;i++) A[i]=A[i]*B[i];
fft(limit,A,-);
for (int i=;i<=limit;i++) c[i]=A[i].x/limit;
}
db q[N],p[N],f[N],a[N],b[N];
int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++)
{
scanf("%lf",&q[i]);
p[i]=q[i];
f[i]=(db)(1.0/i/i);
}
reverse(p+,p++n);
f[]=;q[]=;p[]=;
work(q,f,a);
work(p,f,b);
for (int i=;i<=n;i++) printf("%lf\n",a[i]-b[n-i+]);
return ;
}

[ZJOJ2014] 力 解题报告 (FFT)的更多相关文章

  1. 洛谷 P3338 [ZJOI2014]力 解题报告

    P3338 [ZJOI2014]力 题目描述 给出n个数qi,给出Fj的定义如下: \(F_j = \sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_{i>j ...

  2. [AH2017/HNOI2017] 礼物 解题报告 (FFT)

    题目链接: https://www.luogu.org/problemnew/show/P3723 题目: 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手环,一个留给自 ...

  3. ZROI-Day2比赛解题报告

    ZROIDay2-比赛解题报告 版权原因不提供题面信息 序 这几天作息有点鬼畜,虽然昨晚很晚睡但是早上精神还不错,看到题发现T1很友好?T2woc这暴力都好难打?T3多项式?!这样下去比赛会不会出现更 ...

  4. 【LeetCode】838. Push Dominoes 解题报告(Python)

    [LeetCode]838. Push Dominoes 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http:// ...

  5. CH Round #56 - 国庆节欢乐赛解题报告

    最近CH上的比赛很多,在此会全部写出解题报告,与大家交流一下解题方法与技巧. T1 魔幻森林 描述 Cortana来到了一片魔幻森林,这片森林可以被视作一个N*M的矩阵,矩阵中的每个位置上都长着一棵树 ...

  6. 二模13day1解题报告

    二模13day1解题报告 T1.发射站(station) N个发射站,每个发射站有高度hi,发射信号强度vi,每个发射站的信号只会被左和右第一个比他高的收到.现在求收到信号最强的发射站. 我用了时间复 ...

  7. BZOJ 1051 最受欢迎的牛 解题报告

    题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4438  Solved: 2353[S ...

  8. 习题:codevs 2822 爱在心中 解题报告

    这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...

  9. 习题:codevs 1035 火车停留解题报告

    本蒟蒻又来写解题报告了.这次的题目是codevs 1035 火车停留. 题目大意就是给m个火车的到达时间.停留时间和车载货物的价值,车站有n个车道,而火车停留一次车站就会从车载货物价值中获得1%的利润 ...

随机推荐

  1. linux下使用convert命令修改图片分辨率【转】

    本文转载自:http://blog.csdn.net/mybelief321/article/details/9969949 Convert的resize子命令应该是在ImageMagick中使用较多 ...

  2. NEU 1040 Count

    1040: Count 时间限制: 1 Sec  内存限制: 128 MB提交: 59  解决: 23[提交][状态][讨论版] 题目描述 Many ACM team name may be very ...

  3. filezilla的root账户无法连接服务器解决办法

    lz一直都是用filezilla上传文件到vm虚拟机的,用的是ubuntu14.04的系统.最近自己重新搭了lamp去做thinkphp的学习,lz有两个账户,一个是kin,另外一个是root.大家都 ...

  4. 关于PHP函数

    从这里我开始聊一些php相关的东西了,因为视频教程里并没有讲到过多的JS,JQ,XML和AJAX,这些在后续自学之后再写一些: 有关php的基本语法数据类型什么的就不做介绍了,在PHP手册或各大学习网 ...

  5. canvas实现刮刮卡效果

    canvas实现刮刮卡效果 实现步骤: 设置页面背景图,即刮刮卡底部图片 绘制canvas 刮刮卡顶部图片drawImage 绑定事件 addEventListener  touchstart.tou ...

  6. java/javascript 时间操作工具类

    一.java 时间操作工具类 import org.springframework.util.StringUtils; import java.text.ParseException; import ...

  7. input上传文件检测文件大小

    前几天在做 input[type='file'] 上传图片时,需要检测上传文件的内存大小,写了一个小demo,在此做一总结: <!DOCTYPE html> <html lang=& ...

  8. C++ 简单内存泄漏检测方法

    遇到个bug,MFC程序异常退出,debug模式下输出 Detected memory leaks! Dumping objects -> {366566} normal block at 0x ...

  9. uva 11082 Matrix Decompressing 【 最大流 】

    只看题目的话~~怎么也看不出来是网络流的题目的说啊~~~~ 建图好神奇~~ 最开始不懂---后来看了一下这篇-- http://www.cnblogs.com/AOQNRMGYXLMV/p/42807 ...

  10. Unity "Build failed : Asset is marked as don't save " 解决方案

    编译到Android时失败,是字体的原因: -- -- 摘自官方论坛排第二但点赞第一的回答. http://answers.unity3d.com/questions/363963/build-fai ...