【FFT卷积】BZOJ3527-力
【题目大意】
【思路】
很好这很FFT……
想了半天也没明白到底什么是卷积∑的上下界,我当初学的时候没说一定要从0开始啊quq
我还是背不出FFT的模板我要狗带了
我上面写的什么乱七八糟的,要什么数学,意识流脑补一下就好了。用人话翻译一下:
先看一下这个式子:(盗图图源)
(当然我的程序里下标是从0开始的,差不多啦)
是不是比写∑什么豁然开朗很多啦!
前半部分是从0开始的,且j-1+1=j,显然卷积搞一下。
后面不是从0开始的,但是实在n-1结束的,我们把所有的q左右颠倒过来,仍然满足和是相等的,然后卷积一下,再倒回来减。
好像依然不是人话,意会一下呗。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<complex>
#define pi acos(-1)
using namespace std;
typedef complex<double> com;
typedef long long ll;
const int MAXN=;
double q[MAXN];
com a[MAXN],b[MAXN],c[MAXN],e1[MAXN],e2[MAXN];
int m,n,tmpn,L,Rev[MAXN];
void get_bit(){for (n=,L=;n<m;n<<=) L++;}
void get_Rtable(){for (int i=;i<n;i++) Rev[i]=(Rev[i>>]>>)|((i&)<<(L-));}
void multi(com* a,com* b){for (int i=;i<n;i++) a[i]*=b[i];} void FFT(com* a,int flag)
{
for (int i=;i<n;i++)if(i<Rev[i])swap(a[i],a[Rev[i]]); //利用逆序表,快速求逆序
for (int i=;i<n;i<<=)
{
com wn(cos(*pi/(i*)),flag*sin(*pi/(i*)));
for (int j=;j<n;j+=(i<<))
{
com w(,);
for (int k=;k<i;k++,w*=wn)
{
com x=a[j+k],y=w*a[j+k+i];
a[j+k]=x+y;
a[j+k+i]=x-y;
}
}
}
if (flag==-) for (int i=;i<n;i++) a[i]/=n;
} void init()
{
scanf("%d",&n);
tmpn=n;
for (int i=;i<n;i++) scanf("%lf",&q[i]);
for (int i=;i<n;i++) a[i]=(q[i]),c[i]=(q[n--i]);
for(int i=;i<n;i++) b[i]=(1.0/i/i);
//b仅仅和差有关,还是和下标志一一对应的,不要写成1.0/(i+1)/(i+1)
} void solve()
{
m=n<<;//相乘后的位数是原来的2倍
get_bit();
get_Rtable();
FFT(a,);
FFT(b,);
FFT(c,);
multi(a,b);
multi(c,b);
FFT(a,-);
FFT(c,-);
for (int i=;i<tmpn;i++) printf("%.3f\n",a[i].real()-c[tmpn-i-].real());//不要忘了最后还要把c颠倒回来
} int main()
{
init();
solve();
}
【FFT卷积】BZOJ3527-力的更多相关文章
- BZOJ_2194_快速傅立叶之二_(FFT+卷积)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=2194 给出序列\(a[0],a[1],...,a[n-1]\)和\(b[0],b[1],... ...
- [Luogu P3338] [ZJOI2014]力 (数论 FFT 卷积)
题面 传送门: 洛咕 BZOJ Solution 写到脑壳疼,我好菜啊 我们来颓柿子吧 \(F_j=\sum_{i<j}\frac{q_i*q_j}{(i-j)^2}-\sum_{i>j} ...
- 【BZOJ】3527: [Zjoi2014]力(fft+卷积)
http://www.lydsy.com/JudgeOnline/problem.php?id=3527 好好的一道模板题,我自己被自己坑了好久.. 首先题目看错.......什么玩意.......首 ...
- BZOJ_3527_[ZJOI2014]_力_(FFT+卷积)
描述 题面: http://wenku.baidu.com/link?url=D2ORnA9xjgSxa2GlYLB7gGiYgBcXsy-Aw0kVYTjTE-iYhH1s7h8xXGmnaMwl3 ...
- [ZJOI2014][bzoj3527]力 [FFT]
题面 传送门 思路 把要求的公式列出来: $E_i=\frac{F_i}{q_i}=\sum_{j=1}^i\frac{q_j}{\left(i-j\right)^2}-\sum_{j=i+1}^n\ ...
- BZOJ.2194.快速傅立叶之二(FFT 卷积)
题目链接 \(Descripiton\) 给定\(A[\ ],B[\ ]\),求\[C[k]=\sum_{i=k}^{n-1}A[i]*B[i-k]\ (0\leq k<n)\] \(Solut ...
- [Luogu P3723] [AH2017/HNOI2017]礼物 (FFT 卷积)
题面 传送门:洛咕 Solution 调得我头大,我好菜啊 好吧,我们来颓柿子吧: 我们可以只旋转其中一个手环.对于亮度的问题,因为可以在两个串上增加亮度,我们也可以看做是可以为负数的. 所以说,我们 ...
- FFT卷积相加模板
struct Complex { double r,i; Complex(double _r,double _i):r(_r),i(_i){} Complex(){} Complex operator ...
- SSE图像算法优化系列十一:使用FFT变换实现图像卷积。
本文重点主要不在于FFT的SSE优化,而在于使用FFT实现快速卷积的相关技巧和过程. 关于FFT变换,有很多参考的代码,特别是对于长度为2的整数次幂的序列,实现起来也是非常简易的,而对于非2次幂的序列 ...
随机推荐
- TDD随想录
TDD随想录 谨以本文献给TDD的开创者与传播者 本文纯属个人经历,如有雷同纯属巧合 我从不觉得自己是一个好的程序员,甚至可能连合格都谈不上,不过在内心深处我却渴望着在编程这件事上获得成功. 可惜每次 ...
- 【转】关于Scapy
关于Scapy Scapy的是一个强大的交互式数据包处理程序(使用python编写).它能够伪造 或者解码大量的网络协议数据包,能够发送.捕捉.匹配请求和回复包等等.它可以很容易地处理一些典型操作,比 ...
- imx6设备树pinctrl解析【转】
转自:http://blog.csdn.net/michaelcao1980/article/details/50730421 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近在移植linu ...
- tcp 在调用connect失败后要不要重新socket
tcp 在调用connect失败后要不要重新socket http://blog.csdn.net/occupy8/article/details/48253251
- NOIP 2011 Day 1
NOIP 2011 Day 1 tags: NOIP 搜索 categories: 信息学竞赛 总结 铺地毯 选择客栈 Mayan游戏 铺地毯 Solution 因为只会询问一个点被谁覆盖, 而且后面 ...
- 17:django Email
我自己在看这一节之前自己先实现了一下,django-admin.py startproject testEmail新建一个新项目,urls.py把urlpatterns的第一行取消注释,改成url(r ...
- django开发项目实例2--如何链接图片和css文件(静态文件)
在上一篇随笔里面,我们已经介绍了如何从零开始用django建立一个项目并且初步运行以来了, 现在我们就要开始写我们的html了,也就是django里面的模板了,不过这节我们只讲如何链接图片和css(静 ...
- 关于Free的override不能省略的问题,切记,虚方法是可以被覆盖的方法。
- 禅道BUG管理工具使用链接存储
http://www.zentao.net/book/zentaopmshelp/259.html
- LeetCode解题报告—— Sum Root to Leaf Numbers & Surrounded Regions & Single Number II
1. Sum Root to Leaf Numbers Given a binary tree containing digits from 0-9 only, each root-to-leaf p ...