描述


题面:

http://wenku.baidu.com/link?url=D2ORnA9xjgSxa2GlYLB7gGiYgBcXsy-Aw0kVYTjTE-iYhH1s7h8xXGmnaMwl32SYznVvzodyKZgHODl_ekzIFwEsO64ZOMIvQbsah-9kZiW

提交:

http://www.lydsy.com/JudgeOnline/problem.php?id=3527

给出n个数字(q1~qn),定义$$F_i=\sum_{j<i}{q_iq_j\over (i-j)^2}-\sum_{j>i}{q_iq_j\over (i-j)^2}$$

然后设$$E_i={F_i\over q_i}$$

求  \(E_i\)

分析


我们先把式子化简一下$$E_i=\sum_{j<i}{q_j\over (i-j)^2}-\sum_{j>i}{q_j\over (i-j)^2}$$

然后我们令$$f[i]=q_i,g[i]={1\over i^2}$$

然后发现左边好像卷积的形式$$c_i=\sum_{j=0}^ia_jb_{i-j}$$

但是没有 \(j=0\) 和 \(j=i\) 的情况.没关系,我们令 \(f[i]=0 , g[i]=0\) .

这样的话原式\[\sum_{j=1}^{i-1}{q_j\over (i-j)^2}\]就和\[\sum_{j=0}^i{q_j\over (i-j)^2}\]相等了

这样左边就是\[A_i=\sum_{j=0}^if[j]g[i-j]\]的卷积了

我们来看右边,右边也很有成为卷积的潜质啊,可是不满足\(0\le{j}\le{i}\)啊.没关系,我们发现左边的式子和右边的式子正好相反,所以我们考虑"倒过来",

于是就有原式\[\sum_{j=i+1}^nf[j]g[i-j]\]等价于\[\sum_{j=i}^nf[j]g[j-i]\]又等价于\[\sum_{j=0}^{n-i}f[n-j]g[n-j-i]\]

这个变化可以通过换元实现.我们可以设\(f'[x]=f'[n-x]\),这样的话右式就等于$$\sum_{j=0}^{n-i}f'[j]g[n-i-j]$$

这样右边就是$$B_i=\sum_{j=0}^if'[j]g[i-j]$$的卷积了

最后$$E_i=A_i+B_{n-i}$$

开心地FFT吧~

注意:

1.由于数组是从1开始的,预留了\(f[0]与g[0]\)的位置,所以长度应该+1,所以len=2*n-1+1+1=2*n+1.

 #include <bits/stdc++.h>
using namespace std; const int maxn=;
const double pi=acos(-1.0);
int n,len;
int rev[maxn];
double f[maxn],f_[maxn],g[maxn],ans[maxn];
struct cp{
double r,i;
cp(double r=,double i=):r(r),i(i){}
cp operator + (const cp &x) const { return cp(r+x.r,i+x.i); }
cp operator - (const cp &x) const { return cp(r-x.r,i-x.i); }
cp operator * (const cp &x) const { return cp(r*x.r-i*x.i,r*x.i+i*x.r); }
}a[maxn],b[maxn],c[maxn],A[maxn];
void brc(int &len){
memset(rev,-,sizeof rev);
int k=,l=;
while(k<len) k<<=, l++;
len=k;
for(int i=;i<len-;i++){
if(rev[i]!=-) continue;
int x=i,y=,m=l;
while(m--) y<<=, y|=(x&), x>>=;
rev[i]=y; rev[y]=i;
}
}
void dft(cp *a,int n,int op){
for(int i=;i<n-;i++) A[rev[i]]=a[i];
for(int i=;i<n-;i++) a[i]=A[i];
for(int m=;m<=n;m<<=){
cp wn(cos(2.0*pi/m*op),sin(2.0*pi/m*op));
for(int i=;i<n;i+=m){
cp w(1.0); int k=m>>;
for(int j=;j<k;j++){
cp u=a[i+j],t=w*a[i+j+k];
a[i+j]=u+t;
a[i+j+k]=u-t;
w=w*wn;
}
}
}
if(op==-)for(int i=;i<n;i++) a[i].r/=n;
}
void fft(double *x,double *y,cp *a,cp* b,cp *c,int n){
for(int i=;i<len;i++) a[i]=cp(x[i]), b[i]=cp(y[i]);
dft(a,n,); dft(b,n,);
for(int i=;i<n;i++) c[i]=a[i]*b[i];
dft(c,n,-);
}
int main(){
scanf("%d",&n); len=*n+;
brc(len);
for(int i=;i<=n;i++) scanf("%lf",&f[i]);
for(int i=;i<=n;i++) g[i]=1.0/i/i;
for(int i=;i<=n;i++) f_[i]=f[n-i];
fft(f,g,a,b,a,len);
for(int i=;i<=n;i++) ans[i]=a[i].r;
fft(f_,g,a,b,a,len);
for(int i=;i<=n;i++) ans[i]-=a[n-i].r;
for(int i=;i<=n;i++) printf("%.3lf\n",ans[i]);
return ;
}

BZOJ_3527_[ZJOI2014]_力_(FFT+卷积)的更多相关文章

  1. 【BZOJ】3527: [Zjoi2014]力(fft+卷积)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3527 好好的一道模板题,我自己被自己坑了好久.. 首先题目看错.......什么玩意.......首 ...

  2. [Luogu P3338] [ZJOI2014]力 (数论 FFT 卷积)

    题面 传送门: 洛咕 BZOJ Solution 写到脑壳疼,我好菜啊 我们来颓柿子吧 \(F_j=\sum_{i<j}\frac{q_i*q_j}{(i-j)^2}-\sum_{i>j} ...

  3. 「洛谷3338」「ZJOI2014」力【FFT】

    题目链接 [BZOJ] [洛谷] 题解 首先我们需要对这个式子进行化简,否则对着这么大一坨东西只能暴力... \[F_i=\sum_{j<i} \frac{q_iq_j}{(i-j)^2}-\s ...

  4. BZOJ_2194_快速傅立叶之二_(FFT+卷积)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=2194 给出序列\(a[0],a[1],...,a[n-1]\)和\(b[0],b[1],... ...

  5. 凡客副总裁被曝离职:或因IPO受阻|凡客|王春焕|离职_互联网_新浪科技_新浪网

    凡客副总裁被曝离职:或因IPO受阻|凡客|王春焕|离职_互联网_新浪科技_新浪网 凡客副总裁被曝离职:或因IPO受阻 2013年05月07日 00:56   每日经济新闻    我有话说     每经 ...

  6. 凡客副总裁崔晓琦离职 曾负责旗下V+商城项目_科技_腾讯网

    凡客副总裁崔晓琦离职 曾负责旗下V+商城项目_科技_腾讯网 凡客副总裁崔晓琦离职 曾负责旗下V+商城项目 腾讯科技[微博]乐天2013年09月18日12:44 分享 微博 空间 微信 新浪微博 邮箱 ...

  7. Oracle学习总结_day03_day04_条件查询_排序_函数_子查询

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用. 转载请注明 出自 : luogg的博客园 谢谢配合! day03_条件查询_排序_函数 清空回收站: PUR ...

  8. C Primer Plus_第6章_循环_编程练习

    1.题略 #include int main(void) { int i; char ch[26]; for (i = 97; i <= (97+25); i++) { ch[i-97] = i ...

  9. 转:HIBERNATE一些_方法_@注解_代码示例---写的非常好

    HIBERNATE一些_方法_@注解_代码示例操作数据库7步骤 : 1 创建一个SessionFactory对象 2 创建Session对象 3 开启事务Transaction : hibernate ...

随机推荐

  1. css3 animation实现逐帧动画

    css3里面的animation属性非常强大,但是自己用的比较少,最近有次面试就刚好被问到了,趁现在有时间就对animation做一个小总结.同时实现一个逐帧动画的demo作为练习 animation ...

  2. centos下如何用SMplayer播放WMV格式文件

    安装的是centos6.6,想用来做桌面系统使用!! 装完后,其他的办公软件都安装好了.但是,视频播放却出问题了. 配置的yum安装的SMplayer播放器,播放其他的视频文件没问题,就是WMV的视频 ...

  3. new static() 和 new self() 的区别异同

    长夜漫漫啊! 今天领导本地搭建一个站.发现用PHP 5.2 搭建不起来,站PHP代码里面有很多5.3以上的部分,领导让苦逼我更改在5.2下能运行. 改着改着发现了一个地方 return new sta ...

  4. cookie、localStorage、sessionStorage之间的区别

    sessionStorage 和 localStorage 是HTML5 Web Storage API 提供的,可以方便的在web请求之间保存数据.有了本地数据,就可以避免数据在浏览器和服务器间不必 ...

  5. Python3 网络编程

    虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Microsoft都有各自的 ...

  6. nodejs+socketio+redis实现前端消息实时推送

    1. 后端部分 发送redis消息 可以参考此篇实现(直接使用Jedis即可) http://www.cnblogs.com/binyue/p/4763352.html 2.后端部分: 接收redis ...

  7. 查找计算机IP及占用端口

    1. 在电脑启动搜索框,输入cmd回车打开命令提示符窗口. 输入ipconfig,就可以查看电脑的子网淹没,默认网关,IP等信息. 2. 查看本机开放的端口,即已被占用的端口号. 命令: netsta ...

  8. php 魔术方法__get()和__set()理解

    __get()方法,官方手册上是这样解释的 : ' 当调用(自己加的:或设置|赋值)当前环境下未定义或不可见的类属性或方法时,重载方法会被调用.本节后面将使用"不可访问属性(inaccess ...

  9. iis7如何取消目录的可执行权限

    我们需要把IIs中某一个目录的可执行权限去掉.这在IIs6中是非常方便的,可是因为iis7的机制小编也找了不少资料才找到. 第一步:先选择需要取消权限的目录,然后在右边可以看到 “处理程序映射” 双击 ...

  10. puppet中anchor的作用

    anchor出现背景:Puppet Forge是一个网上的module仓库,许多人写的puppet module会传上去,供大家下载使用.大家下载了一个module可以直接使用,不应该再来改动里面ma ...