BZOJ3527[Zjoi2014]力——FFT
题目描述

输入
输出
n行,第i行输出Ei。与标准答案误差不超过1e-2即可。
样例输入
4006373.885184
15375036.435759
1717456.469144
8514941.004912
1410681.345880
样例输出
3439.793
7509018.566
4595686.886
10903040.872
#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的更多相关文章
- bzoj3527: [Zjoi2014]力 fft
bzoj3527: [Zjoi2014]力 fft 链接 bzoj 思路 但是我们求得是 \(\sum\limits _{i<j} \frac{q_i}{(i-j)^2}-\sum_{i> ...
- [BZOJ3527][ZJOI2014]力 FFT+数学
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3527 首先卷积的形式是$h(i)=\sum_{i=0}^jf(i)g(i-j)$,如果我们 ...
- [bzoj3527][Zjoi2014]力_FFT
力 bzoj-3527 Zjoi-2014 题目大意:给定长度为$n$的$q$序列,定义$F_i=\sum\limits_{i<j}\frac{q_iq_j}{(i-j)^2}-\sum\lim ...
- 【BZOJ-3527】力 FFT
3527: [Zjoi2014]力 Time Limit: 30 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 1544 Solved: 89 ...
- 【BZOJ】3527: [Zjoi2014]力 FFT
[参考]「ZJOI2014」力 - FFT by menci [算法]FFT处理卷积 [题解]将式子代入后,化为Ej=Aj-Bj. Aj=Σqi*[1/(i-j)^2],i=1~j-1. 令f(i)= ...
- P3338 [ZJOI2014]力(FFT)
题目 P3338 [ZJOI2014]力 做法 普通卷积形式为:\(c_k=\sum\limits_{i=1}^ka_ib_{k-i}\) 其实一般我们都是用\(i=0\)开始的,但这题比较特殊,忽略 ...
- 【bzoj3527】[Zjoi2014]力 FFT
2016-06-01 21:36:44 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3527 我就是一个大傻叉 微笑脸 #include&l ...
- bzoj3527: [Zjoi2014]力 卷积+FFT
先写个简要题解:本来去桂林前就想速成一下FFT的,结果一直没有速成成功,然后这几天断断续续看了下,感觉可以写一个简单一点的题了,于是就拿这个题来写,之前式子看着别人的题解都不太推的对,然后早上6点多推 ...
- 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 ...
随机推荐
- SLAM+语音机器人DIY系列:(二)ROS入门——8.理解roslaunch在大型项目中的作用
摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...
- SLAM+语音机器人DIY系列:(二)ROS入门——9.熟练使用rviz
摘要 ROS机器人操作系统在机器人应用领域很流行,依托代码开源和模块间协作等特性,给机器人开发者带来了很大的方便.我们的机器人“miiboo”中的大部分程序也采用ROS进行开发,所以本文就重点对ROS ...
- 原 js实现数据持久化
在写js事件时,常常遇到点击一个事件,然后在若干时间以后需要知道最近一次点击的事件的结点.比如这里: 我点击树节点1,再点击tab2,然后我再来回切换tab,假如最后一次点击tab时在tab2上,这时 ...
- FIFO深度计算
本文设计思想采用明德扬至简设计法.在使用FPGA设计系统时,常需要利用FIFO进行数据缓存保证数据不丢失,因此计算FIFO深度是至关重要的.FIFO的深度主要取决于“最恶劣”的情况,以下对于两种最常见 ...
- 996.ICU 写给... 写给年轻的自己
好久不"水"长文了,随着Github开源项目996.ICU (工作996,生病ICU) (本意是为了指出互联网等早9晚9每周工作6天的不良加班工作制风气不符合法律,是对程序员等技术 ...
- express+sequelize 做后台
第一部分:安装express 第一步:执行 npm install -g express-generator note:必须安装这个,不然创建express项目的时候会提示express命令没有找到 ...
- Linux内存管理专题
Linux的内存管理涉及到的内容非常庞杂,而且与内核的方方面面耦合在一起,想要理解透彻非常困难. 在开始学习之前进行了一些准备工作<如何展开Linux Memory Management学习?& ...
- EntityFramework Core进行读写分离最佳实践方式,了解一下(二)?
前言 写过上一篇关于EF Core中读写分离最佳实践方式后,虽然在一定程度上改善了问题,但是在评论中有的指出更换到从数据库,那么接下来要进行插入此时又要切换到主数据库,同时有的指出是否可以进行底层无感 ...
- Oracle完全卸载详解
Oracle数据库的安装这里就不说了,网上应该有很多,但是oracle数据库的卸载却找不到一个比较详细的完整卸载的说明.很多卸载不完全,会有遗留数据,影响后续的安装.所以自己整理一份以前上学的时候学习 ...
- 第二部分之Redis服务器(第十四章)
Redis服务器复制和多个客户端建立网络连接,处理客户端发送的命令请求,在数据库中保存客户端执行命令所产生的数据. 一,命令请求的执行过程 客户端向服务器发送命令请求 set key value 服务 ...