博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[bzoj3527][Zjoi2014]力_FFT
阅读量:4927 次
发布时间:2019-06-11

本文共 1429 字,大约阅读时间需要 4 分钟。

力 bzoj-3527 Zjoi-2014

题目大意:给定长度为$n$的$q$序列,定义$F_i=\sum\limits_{i<j}\frac{q_iq_j}{(i-j)^2}-\sum\limits_{i>j}\frac{q_iq_j}{(i-j)^2}$。求所有的$E_i=\frac{F_i}{q_i}$。

注释:$1\le n\le 10^5$,$0\le q\le 10^9$。


想法:我们可以把$F_i$中每一项上的$q_i$删掉因为我们求得$E_i$除掉了。

进而我们考虑如何求解$F$。

先看$j<i$的部分

$F_i=\sum\limits_{j=0}^{i-1} \frac{q_j}{(i-j)^2}$。

设$p(x)=\frac{1}{x^2}$。

所以$F_i=\sum\limits_{j=0}^{i-1} q_j\cdot p_{i-j}$。

紧接着我们强制令$p_0=0$,$F_i=\sum\limits_{j=0}^i q_j\cdot p_{i-j}$,可以用$FFT$加速。

接下来看$i<j$的部分。

此时$F_i=\sum\limits_{j=i+1}^{n-1} q_j\cdot p_{j-i}$。

像一样,这时我们将$p$序列翻转,仍然可以用$FFT$加速。

之后把这两部分加一起即可。

Code

#include 
#include
#include
#include
#include
#define N 100010 using namespace std; typedef double db;const db pi=acos(-1);db E[N<<2],q[N<<2],p[N<<2];struct cp{ db x,y; cp() {x=y=0;} cp(db x_,db y_) {x=x_,y=y_;} cp operator + (const cp &a) const {return cp(x+a.x,y+a.y);} cp operator - (const cp &a) const {return cp(x-a.x,y-a.y);} cp operator * (const cp &a) const {return cp(x*a.x-y*a.y,x*a.y+y*a.x);}}a[N<<2],b[N<<2],c[N<<2],d[N<<2];void fft(cp *a,int len,int flg){ int i,j,k,t; cp tmp,w,wn; for(i=k=0;i
k) swap(a[i],a[k]); for(j=len>>1;(k^=j)
>=1); } for(k=2;k<=len;k<<=1) { wn=cp(cos(2*pi*flg/k),sin(2*pi*flg/k)); t=k>>1; for(i=0;i
> n ; for(int i=0;i

小结:对于这两种形式可以用$FFT$加速应该熟练掌握。

转载于:https://www.cnblogs.com/ShuraK/p/10012071.html

你可能感兴趣的文章
FZU 1096 QS Network
查看>>
TypeScript设计模式之策略、模板方法
查看>>
Linux2.6-4G的线性地址空间的分配与使用
查看>>
京东分布式缓存redis应用实战
查看>>
个人用户永久免费,可自动升级版Excel插件,使用VSTO开发,Excel催化剂功能第8波-快速可视化数据...
查看>>
官网分析(英雄传奇)(如何设计网站前端)
查看>>
SSH Key的生成和使用(for git)
查看>>
html5--6-52 动画效果-过渡
查看>>
调查表与调查结果分析
查看>>
Windows系统下安装MySQL详细教程(命令安装法)
查看>>
PHP实用小程序(六)
查看>>
PDFsharp Samples
查看>>
django-cms 代码研究(八)app hooks
查看>>
peewee Model.get的复杂查询
查看>>
IE浏览器兼容性设置的一些问题
查看>>
SQL Server复制入门(二)----复制的几种模式
查看>>
javascript 简单认识
查看>>
tomcat 系统架构与设计模式 第二部分 设计模式 转
查看>>
scanf中的%[^\n]%*c格式
查看>>
启动Eclipse报Initializing Java Tooling错误解决方法
查看>>