题目

P3338 [ZJOI2014]力

做法

普通卷积形式为:\(c_k=\sum\limits_{i=1}^ka_ib_{k-i}\)

其实一般我们都是用\(i=0\)开始的,但这题比较特殊,忽略那部分,其他的直接按下标存下来,反正最后的答案是不变的

好了步入正题吧,我们定义 $$F_j=\sum\limits_{i<j}\dfrac{q_iq_j}{(i-j)2}-\sum\limits_{i<j}\dfrac{q_iq_j}{(i-j)2}$$

求\(E_i=\dfrac{F_i}{q_i}\)

显然$$E_j=\sum\limits_{i<j}\dfrac{q_i}{(i-j)2}-\sum\limits_{i<j}\dfrac{q_i}{(i-j)2}$$

\[E_j=\sum_{i=1}^{j-1}\dfrac{q_i}{(i-j)^2}-\sum_{i=j+1}^{n}\dfrac{q_i}{(i-j)^2}
\]

令\(f_i=q_i,g_i=\dfrac{1}{i^2}\),特别地,\(g_0=0\),则有:$$E_j=\sum_{i=1}{j-1}f_ig_{i-j}-\sum_{i=j+1}{n}f_ig_{i-j}$$

左边部分很简单就能化成卷积形式:$$\sum_{i=1}{j-1}f_ig_{i-j}=\sum_{i=1}{j-1}f_ig_{j-i}=\sum_{i=1}^{j}f_ig_{j-i}$$

右边部分:$$\sum\limits_{i=j+1}{n}f_ig_{i-j}=\sum\limits_{i=1}{n-j}f_{i+j}g_{i}$$

令\(p_i=f_{n-i}\),则\(p_{n-i-j}=f_{i+j}\),则有:$$\sum\limits_{i=1}{n-j}f_{i+j}g_{i}=\sum_{i=1}{n-j} p_{n-i-j}g_i$$

都化成卷积形式了直接FFT

My complete code

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const double Pi=acos(-1.0);
const int maxn=300000;
struct complex{
double x,y;
complex (double xx=0,double yy=0){
x=xx,y=yy;
}
}f[maxn],p[maxn],g[maxn];
int n,limit,L;
int r[maxn];
complex operator + (complex x,complex y){
return complex(x.x+y.x,x.y+y.y);
}
complex operator - (complex x,complex y){
return complex(x.x-y.x,x.y-y.y);
}
complex operator * (complex x,complex y){
return complex(x.x*y.x-x.y*y.y,x.x*y.y+x.y*y.x);
}
inline void FFT(complex *A,int type){
for(int i=0;i<limit;++i)
if(i<r[i])
swap(A[i],A[r[i]]);
for(int mid=1;mid<limit;mid<<=1){
complex WN(cos(Pi/mid),type*sin(Pi/mid));
for(int R=mid<<1,j=0;j<limit;j+=R){
complex w(1,0);
for(int k=0;k<mid;++k,w=w*WN){
complex x=A[j+k],y=w*A[j+mid+k];
A[j+k]=x+y,
A[j+mid+k]=x-y;
}
}
}
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%lf",&f[i].x),f[i].y=0,
g[i].x=(double)1.0/i/i;
p[n-i].x=f[i].x;
}
limit=1,L=0;
while(limit<n+n)
limit<<=1,
++L;
for(int i=0;i<limit;++i)
r[i]=(r[i>>1]>>1)|((i&1)<<(L-1));
FFT(f,1),FFT(p,1),FFT(g,1);
for(int i=0;i<limit;++i)
f[i]=f[i]*g[i];
for(int i=0;i<limit;++i)
p[i]=p[i]*g[i];
FFT(f,-1),FFT(p,-1);
for(int i=1;i<=n;++i)
printf("%.3lf\n",f[i].x/limit-p[n-i].x/limit);
return 0;
}/*
*/

P3338 [ZJOI2014]力(FFT)的更多相关文章

  1. P3338 [ZJOI2014]力 /// FFT 公式转化翻转

    题目大意: https://www.luogu.org/problemnew/show/P3338 题解 #include <bits/stdc++.h> #define N 300005 ...

  2. [Luogu]P3338 [ZJOI2014]力(FFT)

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

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

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

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

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

  5. [洛谷P3338] [ZJOI2014]力

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

  6. bzoj3527: [Zjoi2014]力 fft

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

  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)

    传送门 题目要求$$E_i=\frac{F_i}{q_i}=\sum_{j=1}^{i-1}\frac{q_j}{(i-j)^2}-\sum_{j=i+1}^n\frac{q_j}{(j-i)^2}$ ...

  9. 【bzoj3527】[Zjoi2014]力 FFT

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

随机推荐

  1. CentOS 安装rz和sz

    在虚机装了CentOS6.4版本,结果ssh上去后发现rz命令不能用.那只有自力更生了,其实很简单,如下: yum install lrzsz 如果本地没有包,需要编译安装了: cd /tmp wge ...

  2. javascript与as3交互

    文章都是发布在github再转到这边的,这边格式可能会乱掉.博客地址:benqy.com 写在前面的废话 公司首页的flash广告,都是由第三方制作的,脚本和flash文件都是由各个广告公司独立制作, ...

  3. eclipse编写scala应用运行在spark集群上

    代码 package spark_1 import org.apache.spark.SparkConf import org.apache.spark.SparkContext class Work ...

  4. TransactionScope的用法

    using (TransactionScope ts = new TransactionScope()) { Model.user_login_log model = new Model.user_l ...

  5. SQL索引及表的页的逻辑顺序与物理顺序

    1.经过测试发现当聚集索引新建或者重建时,会按照逻辑顺序重新排列数据页和数据页内的数据行的物理顺序. 2.但修改表时,无论是聚集索引还是堆的数据页都是按自然顺序向后插入数据,页面上的偏移量可以证明.因 ...

  6. linux 面试题

    [题目]一个数组,输出重复次数最多的前你n位,倒序输出 [答案]   catwords.txt | sort | uniq -c | sort -k1,1nr | head -n [解析]   sor ...

  7. Hadoop学习笔记(二)——zookeeper使用和分析

    分布式架构是中心化的设计.就是一个主控机连接多个处理节点,因此保证主控机高可用性十分关键.分布式锁是解决该问题的较好方案,多主控机抢一把锁.Zookeeper就是一套分布式锁管理系统,用于高可靠的维护 ...

  8. Java多线程之~~~~synchronized 方法

    在多线程开发中,总会遇到多个在不同线程中的方法操作同一个数据,这样在不同线程中操作这个数据不同的顺序 或者时机会导致各种不同的现象发生,以至于不能实现你预期的效果,不能实现一致性,这时候就能够使用 s ...

  9. git 撤销已经push到远端的代码

    其实是没有直接让远端代码回复到某次的指令,实现撤销push的思路如下: 1.先让代码恢复到想要恢复的前一次提交记录 2.重新提交代码,覆盖端上的代码,就相当于撤销了push 的提交 实现方式如下: 1 ...

  10. wcf利用IDispatchMessageInspector实现接口监控日志记录和并发限流

    一般对于提供出来的接口,虽然知道在哪些业务场景下才会被调用,但是不知道什么时候被调用.调用的频率.接口性能,当出现问题的时候也不容易重现请求:为了追踪这些内容就需要把每次接口的调用信息给完整的记录下来 ...