BZOJ.3527.[ZJOI2014]力(FFT)
题目链接
\(Descripiton\)
给出\(q[\ ]\),\[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]\)。
\(Solution\)
这的挺详细了,我再写遍。
(下标从0开始,\(n=n-1\))
可以把\(q_j\)约去,即\[E_j=\sum_{i=0}^{j-1}\frac{q_i}{(i-j)^2}-\sum_{i=j+1}^n\frac{q_i}{(i-j)^2}\]
令\(f[i]=q[i],g[i]=\frac{1}{i^2}\),规定\(g[0]=0\),那么
\[E_j=\sum_{i=0}^{j-1}f[i]*g[j-i]-\sum_{i=j+1}^nf[i]*g[j-i]\]
(注意是个平方)
左边\(\sum_{i=0}^{j-1}f[i]*g[j-i]=\sum_{i=0}^{j}f[i]*g[j-i]\)就是卷积的形式,可以直接算。
右边
\[ \begin{aligned} \sum_{i=j+1}^nf[i]*g[j-i]&=\sum_{i=j}^nf[i]*g[j-i]\\ &=\sum_{i=0}^{n-j}f[i+j]*g[i] \end{aligned} \]
反转\(f[\ ]\),令\(h[n-j-i]=f[i+j]\),那么\[\sum_{i=0}^{n-j}f[i+j]*g[i]=\sum_{i=0}^{n-j}h[n-j-i]*g[i]\]
令\(X_{n-j}=\sum_{i=0}^{n-j}h[n-j-i]*g[i]\),也用FFT计算就可以了。
最后\(E_j=\sum_{i=0}^{j-1}f[i]*g[j-i]-X_{n-j}\)。
还有种常数更优的方法?
//15204kb 3140ms
#include <cmath>
#include <cstdio>
#include <algorithm>
const int N=263000;//2^{18}=262144 > 2*1e5
const double PI=acos(-1);int n;
double q[N];
struct Complex
{double x,y;Complex() {}Complex(double x,double y):x(x),y(y) {}Complex operator + (const Complex &a)const{return Complex(x+a.x, y+a.y);}Complex operator - (const Complex &a)const{return Complex(x-a.x, y-a.y);}Complex operator * (const Complex &a)const{return Complex(x*a.x-y*a.y, x*a.y+y*a.x);}
}f[N],g[N],h[N];void FFT(Complex *a,int lim,int opt)
{for(int i=0,j=0; i<lim; ++i){if(i>j) std::swap(a[i],a[j]);for(int l=lim>>1; (j^=l)<l; l>>=1);}for(int i=2; i<=lim; i<<=1){int mid=i>>1;Complex Wn(cos(PI/mid),opt*sin(PI/mid)),t;
// Complex Wn(cos(2.0*PI/i),opt*sin(2.0*PI/i)),t;for(int j=0; j<lim; j+=i){Complex w(1,0);for(int k=0; k<mid; ++k,w=w*Wn)a[j+mid+k]=a[j+k]-(t=w*a[j+mid+k]),a[j+k]=a[j+k]+t;}}if(opt==-1)for(int i=0; i<lim; ++i) a[i].x/=lim;
}int main()
{scanf("%d",&n), --n;int lim=1;while(lim <= n<<1) lim<<=1;for(int i=0; i<=n; ++i) scanf("%lf",&q[i]);for(int i=0; i<=n; ++i) f[i]=Complex(q[i],0);for(int i=0; i<=n; ++i) h[i]=Complex(q[n-i],0);for(int i=1; i<=n; ++i) g[i]=Complex(1.0/i/i,0);g[0]=Complex(0,0);FFT(f,lim,1), FFT(g,lim,1), FFT(h,lim,1);for(int i=0; i<lim; ++i) f[i]=f[i]*g[i], h[i]=h[i]*g[i];FFT(f,lim,-1), FFT(h,lim,-1);for(int i=0; i<=n; ++i) printf("%.3lf\n",f[i].x-h[n-i].x);return 0;
}
转载于:https://www.cnblogs.com/SovietPower/p/8991435.html
BZOJ.3527.[ZJOI2014]力(FFT)相关推荐
- bzoj 3527 [Zjoi2014]力——FFT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3527 把 q[ i ] 除掉.设 g[ i ] = i^2 ,有一半的式子就变成卷积了:另一 ...
- BZOJ 3527: [ZJOI2014]力(FFT)
题意 给出\(n\)个数\(q_i\),给出\(Fj\)的定义如下: \[F_j=\sum \limits _ {i < j} \frac{q_iq_j}{(i-j)^2}-\sum \limi ...
- 数学(FFT):BZOJ 3527 [Zjoi2014]力
题目在这里:http://wenku.baidu.com/link?url=X4j8NM14MMYo8Q7uPE7-7GjO2_TXnMFA2azEbBh4pDf7HCENM3-hPEl4mzoe2w ...
- BZOJ 3527: [Zjoi2014]力
题目地址:http://www.lydsy.com/JudgeOnline/problem.php?id=3527 题目大意:见原题. 算法讨论: 设A[i]=q[i],B[i]=1/(i^2). 设 ...
- BZOJ 3527 [Zjoi2014] 力
Description 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. Input 第一行一个整数n. 接下来n行每行输入一个数,第i行表示qi. n≤100000,0<qi ...
- P3338 [ZJOI2014]力 FFT + 推式子
传送门 文章目录 题意: 思路: 题意: 思路: 这个式子看起来很FFTFFTFFT,让我们来化简一下. 考虑EEE中直接将qiq_iqi约掉,所以Ei=∑j=1i−1qj(i−j)2−∑j=i+1 ...
- P3338 [ZJOI2014]力 [FFT]
P3338[ZJOI2014]力P3338 [ZJOI2014]力P3338[ZJOI2014]力 给出n个数qi,给出Fj的定义如下: Fj=∑i<jqiqj(i−j)2−∑i>jqiq ...
- 【BZOJ】3527: [Zjoi2014]力(fft+卷积)
http://www.lydsy.com/JudgeOnline/problem.php?id=3527 好好的一道模板题,我自己被自己坑了好久.. 首先题目看错.......什么玩意.......首 ...
- BZOJ3527:[ZJOI2014]力(FFT)
Description 给出n个数qi,给出Fj的定义如下: 令Ei=Fi/qi,求Ei. Input 第一行一个整数n. 接下来n行每行输入一个数,第i行表示qi. n≤100000,0<qi ...
最新文章
- Java连接数据库警告WARN: Establishing SSL connection without server's identity ......
- Mongo DB 2.6 需要知道的一些自身限定
- python 学习笔记(08)
- 新型攻击接踵而来 思科Talos解析Jaff勒索软件
- send和WSASend区别
- c语言编程平均分,用C语言编程平均分数
- SpringMVC之数据传递三Ajax与Controller交互
- 特斯拉明年会有100万辆自动驾驶出租车 你敢坐吗?
- Perl 模块 Getopt::Std 和 Getopt::Long
- Daily scrum[2013.12.02]
- SQL数据表中按中文数字一二三四五排序
- CIO40:IT人22-30岁职业规划
- Idea编译:Java找不到符号
- HADOOP的搭建和配置(一)基础环境配置
- 设计模式---原型模式
- python中offset的意思_python覆盖从offset1到offset2的字节
- “画仓鼠” 大赛,正式回归了!
- Spring Cloud(十七):高并发设计
- 马尔科夫链原理介绍【通俗易懂】
- Linux下定时删除指定目下n天前的文件