题目描述

给出n个数qi,给出Fj的定义如下:
令Ei=Fi/qi,求Ei.

输入

第一行一个整数n。
接下来n行每行输入一个数,第i行表示qi。
n≤100000,0<qi<1000000000

输出

n行,第i行输出Ei。与标准答案误差不超过1e-2即可。

样例输入

5
4006373.885184
15375036.435759
1717456.469144
8514941.004912
1410681.345880

样例输出

-16838672.693
3439.793
7509018.566
4595686.886
10903040.872
 
将$q_{j}$移到等式左边,可以得到:$E_{k}=\sum\limits_{i<k}^{ }\frac{q_{i}}{(i-k)^2}-\sum\limits_{i>k}^{ }\frac{q_{i}}{(i-k)^2}$
将等式右边分成两部分看。
对于第一部分设$j=k-i$,可以得到:$E_{k}'=\sum\limits_{i+j==k}^{ }q_{i}*\frac{1}{j^2}$,设$F(i)=q_{i},G(i)=\frac{1}{i^2},H(i)=E_{i}'$,将$F$和$G$卷积即可得到$H$。
对于第二部分设$j=i-k$,可以得到:$E_{k}''=\sum\limits_{i-j==k}^{ }q_{i}*\frac{1}{j^2}$,即$E_{k}''=\sum\limits_{j+n-i+1==n-k+1}^{ }q_{i}*\frac{1}{j^2}$。
将$n-k+1$和$n-i+1$看作新的$k$和$i$,也就是将第一部分中的$H$和$F$翻转,然后再卷积即可。即$F(n-i+1)=q_{i},H(n-i+1)=E_{i}''$。
将两部分对应做减法即可。

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<vector>
#include<cstdio>
#include<bitset>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
const double pi=acos(-1.0);
struct lty
{
double x,y;
lty(double X=0,double Y=0){x=X,y=Y;}
}f[400000],g[400000],h[400000];
int n,mask=1;
double ans[400000];
double q[400000];
lty operator +(lty a,lty b){return lty(a.x+b.x,a.y+b.y);}
lty operator -(lty a,lty b){return lty(a.x-b.x,a.y-b.y);}
lty operator *(lty a,lty b){return lty(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);}
void DFT(lty *a,int len)
{
for(int i=0,k=0;i<len;i++)
{
if(i>k)
{
swap(a[i],a[k]);
}
for(int j=len>>1;(k^=j)<j;j>>=1);
}
for(int k=2;k<=len;k<<=1)
{
int t=k>>1;
lty x(cos(pi/t),sin(pi/t));
for(int i=0;i<len;i+=k)
{
lty w(1,0);
for(int j=i;j<i+t;j++)
{
lty res=a[j+t]*w;
a[j+t]=a[j]-res;
a[j]=a[j]+res;
w=w*x;
}
}
}
}
void IDFT(lty *a,int len)
{
for(int i=0,k=0;i<len;i++)
{
if(i>k)
{
swap(a[i],a[k]);
}
for(int j=len>>1;(k^=j)<j;j>>=1);
}
for(int k=2;k<=len;k<<=1)
{
int t=k>>1;
lty x(cos(pi/t),-1.0*sin(pi/t));
for(int i=0;i<len;i+=k)
{
lty w(1,0);
for(int j=i;j<i+t;j++)
{
lty res=a[j+t]*w;
a[j+t]=a[j]-res;
a[j]=a[j]+res;
w=w*x;
}
}
}
for(int i=0;i<len;i++)
{
a[i].x=a[i].x/len;
}
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%lf",&q[i]);
}
while(mask<=(n<<1))
{
mask<<=1;
}
for(int i=1;i<=n;i++)
{
f[i].x=q[i];
}
for(int i=1;i<=n;i++)
{
g[i].x=(double)1/((double)i*i);
}
DFT(f,mask);
DFT(g,mask);
for(int i=0;i<mask;i++)
{
h[i]=g[i]*f[i];
}
IDFT(h,mask);
for(int i=1;i<=n;i++)
{
ans[i]=h[i].x;
}
for(int i=0;i<mask;i++)
{
f[i].x=f[i].y=0;
g[i].x=g[i].y=0;
}
for(int i=1;i<=n;i++)
{
f[i].x=q[n-i+1];
}
for(int i=1;i<=n;i++)
{
g[i].x=(double)1/((double)i*i);
}
DFT(f,mask);
DFT(g,mask);
for(int i=0;i<mask;i++)
{
h[i]=g[i]*f[i];
}
IDFT(h,mask);
for(int i=1;i<=n;i++)
{
ans[i]-=h[n-i+1].x;
}
for(int i=1;i<=n;i++)
{
printf("%.3f\n",ans[i]);
}
}

BZOJ3527[Zjoi2014]力——FFT的更多相关文章

  1. bzoj3527: [Zjoi2014]力 fft

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

  2. [BZOJ3527][ZJOI2014]力 FFT+数学

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3527 首先卷积的形式是$h(i)=\sum_{i=0}^jf(i)g(i-j)$,如果我们 ...

  3. [bzoj3527][Zjoi2014]力_FFT

    力 bzoj-3527 Zjoi-2014 题目大意:给定长度为$n$的$q$序列,定义$F_i=\sum\limits_{i<j}\frac{q_iq_j}{(i-j)^2}-\sum\lim ...

  4. 【BZOJ-3527】力 FFT

    3527: [Zjoi2014]力 Time Limit: 30 Sec  Memory Limit: 256 MBSec  Special JudgeSubmit: 1544  Solved: 89 ...

  5. 【BZOJ】3527: [Zjoi2014]力 FFT

    [参考]「ZJOI2014」力 - FFT by menci [算法]FFT处理卷积 [题解]将式子代入后,化为Ej=Aj-Bj. Aj=Σqi*[1/(i-j)^2],i=1~j-1. 令f(i)= ...

  6. P3338 [ZJOI2014]力(FFT)

    题目 P3338 [ZJOI2014]力 做法 普通卷积形式为:\(c_k=\sum\limits_{i=1}^ka_ib_{k-i}\) 其实一般我们都是用\(i=0\)开始的,但这题比较特殊,忽略 ...

  7. 【bzoj3527】[Zjoi2014]力 FFT

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

  8. bzoj3527: [Zjoi2014]力 卷积+FFT

    先写个简要题解:本来去桂林前就想速成一下FFT的,结果一直没有速成成功,然后这几天断断续续看了下,感觉可以写一个简单一点的题了,于是就拿这个题来写,之前式子看着别人的题解都不太推的对,然后早上6点多推 ...

  9. 2019.02.28 bzoj3527: [Zjoi2014]力(fft)

    传送门 fftfftfft菜题. 题意简述:给一个数列aia_iai​,对于i=1→ni=1\rightarrow ni=1→n求出ansi=∑i<jai(i−j)2−∑i>jai(i−j ...

随机推荐

  1. SLAM+语音机器人DIY系列:(二)ROS入门——5.编写简单的消息发布器和订阅器

    摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...

  2. 限制TextBox只允许输入数字和字母

    设置TextBox控件属性 ImeMode=Disable ShortcutsEnabled=False VB.NET Private Sub TextBox1_KeyDown(sender As O ...

  3. SpringCloud Alibaba-nacos注册中心

    什么是 Nacos?(https://nacos.io) Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量 ...

  4. Bootstrap实现注册界面

    样式一 例图 代码 <head> <meta charset="UTF-8"> <title>用户注册</title> <li ...

  5. 兹瓷查rank和kth的STL平衡树

    兹瓷查rank和kth的STL平衡树 明天就是一轮省选了啊..这可能是退役前的最后一篇博文了吧(如果心情不好怕是连游记都会咕) 众周所知stl中有一个依靠红黑树实现的nb数据结构-std::set 但 ...

  6. Kotlin 扩展——省略findViewById

    现在 Kotlin 安卓扩展插件能够提供与这些开源库功能相同的体验,不需要添加任何额外代码. import kotlinx.android.synthetic.main.activity_main.* ...

  7. Android视频录制从不入门到入门系列教程(二)————显示视频图像

    1.创建一个空的工程,注意声明下列权限: <uses-permission android:name="android.permission.CAMERA"/> < ...

  8. HTML导出excel

    在博客园找到的相关问题http://q.cnblogs.com/q/12952  还有相关的回答http://www.cnblogs.com/zhouxin/archive/2009/12/11/16 ...

  9. nginx性能优化(针对于高并发量仅供参考,并不是方案)

    目录 关于nginx.conf中的优化 配置nginx客户端网页缓存本地时间 nginx日志切割 nginx连接超时优化 Nginx 实现网页压缩功能 Nginx 实现防盗链功能 为目录添加访问控制 ...

  10. win10 桌面设置为远程桌面

    查看方法: 1.点击桌面“计算机”,右键,点击属性. 2.在计算机属性系统窗口中点击“远程设置”. 3.在“系统属性”对话框中远程协助勾选“允许远程协助连接这台计算机”. 4.在“远程协助”点击“高级 ...