bzoj 3527: [Zjoi2014]力【FFT】
大力推公式,目标是转成卷积形式:\( C_i=\sum_{j=1}^{i}a_jb_{i-j} \)
首先下标从0开始存,n--
\]
\]
设
\]
\]
\]
\]
故
\]
先推ai
!注意j==i的情况下g函数为0不影响结果,所以方便起见把大于小于都换成了大于等于小于等于
\]
\]
\]
于是卷积*1get
再推bi
\]
\]
然后用j+i替换j
\]
\]
\]
然后用n-i-j替换j
\]
\]
然后发现这样转化一下
\]
\]
\]
设
\]
\]
设
\]
\]
于是卷积*2get
然后直接上FFT即可
!!!对于g函数,应该是g[i]=1.0/i/i !!g[i]=1.0/(i*i)会炸精度!
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int N=1000005;
int n,lm,bt,re[N];
struct cd
{
double r,i;
cd(double R=0,double I=0)
{
r=R,i=I;
}
cd operator + (cd &a) const
{
return cd(r+a.r,i+a.i);
}
cd operator - (cd &a) const
{
return cd(r-a.r,i-a.i);
}
cd operator * (cd &a) const
{
return cd(r*a.r-i*a.i,r*a.i+i*a.r);
}
}f[N],f1[N],g[N],a[N],b[N];
void dft(cd a[],int f)
{
for(int i=1;i<lm;i++)
if(i<re[i])
swap(a[i],a[re[i]]);
for(int i=2;i<=lm;i<<=1)
{
cd wi=cd(cos(2.0*M_PI/i),f*sin(2.0*M_PI/i));
for(int k=0;k<lm;k+=i)
{
cd w=cd(1,0),x,y;
for(int j=0;j<(i>>1);j++)
{
x=a[j+k];
y=a[j+k+(i>>1)]*w;
a[j+k]=x+y;
a[j+k+(i>>1)]=x-y;
w=w*wi;
}
}
}
if(f==-1)
for(int i=0;i<lm;i++)
a[i].r/=lm;
}
int main()
{
scanf("%d",&n);
n--;
for(int i=0;i<=n;i++)
{
scanf("%lf",&f[i].r);
f1[n-i].r=f[i].r;
}
for(int i=1;i<=n;i++)
g[i].r=1.0/i/i;
for(int i=0;;i++)
if((1<<i)>2*n)
{
bt=i;
lm=(1<<i);
break;
}
for(int i=0;i<lm;i++)
re[i]=(re[i>>1]>>1)|((i&1)<<(bt-1));
dft(f,1);
dft(f1,1);
dft(g,1);
for(int i=0;i<lm;i++)
{
a[i]=f[i]*g[i];
b[i]=f1[i]*g[i];
}
dft(a,-1);
dft(b,-1);
for(int i=0;i<=n;i++)
printf("%.3f\n",a[i].r-b[n-i].r);
return 0;
}
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
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3527 看了看TJ才推出来式子,还是不够熟练啊: TJ:https://blog.csdn.n ...
- BZOJ 3527: [Zjoi2014]力(FFT)
我们看一下这个函数,很容易就把他化为 E=sigma(aj/(i-j)/(i-j))(i>j)-sigma(aj/(i-j)/(i-j))(j>i) 把它拆成两半,可以发现分子与分母下标相 ...
- BZOJ 3527 [Zjoi2014]力 ——FFT
[题目分析] FFT,构造数列进行卷积,挺裸的一道题目诶. 还是写起来并不顺手,再练. [代码] #include <cmath> #include <cstdio> #inc ...
- 【BZOJ】3527: [Zjoi2014]力 FFT
[参考]「ZJOI2014」力 - FFT by menci [算法]FFT处理卷积 [题解]将式子代入后,化为Ej=Aj-Bj. Aj=Σqi*[1/(i-j)^2],i=1~j-1. 令f(i)= ...
- ●BZOJ 3527 [Zjoi2014]力
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=3527 题解: FFT求卷积. $$\begin{aligned}E_i&=\frac ...
- BZOJ 3527: [ZJOI2014]力(FFT)
BZOJ 3527: [ZJOI2014]力(FFT) 题意: 给出\(n\)个数\(q_i\),给出\(Fj\)的定义如下: \[F_j=\sum \limits _ {i < j} \fra ...
- 数学(FFT):BZOJ 3527 [Zjoi2014]力
题目在这里:http://wenku.baidu.com/link?url=X4j8NM14MMYo8Q7uPE7-7GjO2_TXnMFA2azEbBh4pDf7HCENM3-hPEl4mzoe2w ...
- bzoj 3527: [Zjoi2014]力 快速傅里叶变换 FFT
题目大意: 给出n个数\(q_i\)定义 \[f_i = \sum_{i<j}{\frac{q_iq_j}{(i-j)^2}} - \sum_{i>j}\frac{q_iq_j}{(i-j ...
随机推荐
- python学习之-- 装饰器
高阶函数+嵌套函数 == 装饰器 什么是装饰器: 其实也是一个函数. 功能:为其他的函数添加附加功能 原则:不能修改被装饰的函数的源代码和调用方式 学习装饰器前首先要明白以下3条事项: 1:函数 即 ...
- c++ 高性能日志库(muduo_AsyncLogging)
c++ 高性能日志库(muduo_AsyncLogging) 实现一个高效的网络日志库要解决那些问题? 首先明确一下问题的模型,这是一个典型的多生产者 单消费者问题,对于前端的日志库使用者来说,应该做 ...
- Python数据分析常用的库总结
Python之所以能够成为数据分析与挖掘领域的最佳语言,是有其独特的优势的.因为他有很多这个领域相关的库可以用,而且很好用,比如Numpy.SciPy.Matploglib.Pandas.Scikit ...
- git修改commit message及vi编辑器的简单使用
1.修改commit信息 git commit --amend 2.进入vi编辑器修改 ‘i’进入insert模式,输入文字: ‘esc’回到命令模式,删除文字,移动光标: ‘:’进入底行模式,‘wq ...
- 工作总结 使用html模板发邮件 前面空一大块
HTML邮件的本质其实是发送了一个html页面.邮件的空白必然是页面的空白,所以你要找到你发送邮件的html模板所在,然后去掉空白即可,如果这是一个公共文件,需要注意你往往用的只是你的部分,很大程度还 ...
- sdut 面向对象程序设计上机练习四(变量引用)
面向对象程序设计上机练习四(变量引用) Time Limit: 1000MS Memory limit: 65536K 题目描写叙述 将变量的引用作为函数形參,实现2个int型数据交换. 输入 输入2 ...
- Linux下kill命令的学习,(主要根据man手册进行的翻译)
名字 kill -终止一个进程 格式 kill [-s signal | -p] [--] pid .. ...
- 手把手教你_怎么找android应用的包名和启动activity
自己主动化測试中常常遇到这个问题,关于这个题目,方法众多,咱的目的是找个比較简单靠谱的: 方法一: 先进入cmd窗体,adb shell 后: cd /data/data ls 能够看到包名了吧,缺点 ...
- 【iOS系列】-oc中特有的语法
[iOS系列]-oc中特有的语法 oc数据类型: 1,基本类型 2,对象类型 3,id 4,BOOL 5,block 6,SEL 1:category 使用继承关系来扩充一个类,有一个弊病,高耦合性 ...
- 密码过期导致Oracle process耗尽问题
oracle忽然连不上! 大致是报这样的错: ORA-12516: TNS: 监听程序找不到符合协议堆栈要求的可用处理程序 ORA-12520: TNS: 监听程序无法为请求的服务器类型找到可用的处理 ...