【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次幂的序列 ...
随机推荐
- velocity & freemarker
一.Velocity Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅使用简单的模板语言(template language)来引用由java代码定义的 ...
- js_面向对象设计和行为委托设计模式
最近换了新工作,面试过程中有多多少少的问题没有给的出答案,为自己的技术短板而促急. javascript中万物皆对象(键:值构成的一种数据),暂且不讨论这个句话的对与错,可以想象对象在javascri ...
- Angular2.0 基础: Form
对于Angular2.0 的Form表单中的隐藏和验证,个人觉得还是挺有意思的. 1.通过ngModel 跟踪修改状态与验证. 在表单中使用 ngModel 可以获得更多的控制权,包括一些常用的验证. ...
- C++学习之路(四):线程安全的单例模式
(一)简单介绍 单例模式分为两种类型:懒汉模式和饿汉模式. 懒汉模式:在实际类对象被调用时才会产生一个新的类实例,并在之后返回这个实例.多线程环境下,多线程可能会同时调用接口函数创建新的实例,为了防止 ...
- linux中断线程化分析【转】
转自:http://blog.csdn.net/qq405180763/article/details/24120895 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近在为3.8版本的Li ...
- DTW 算法(转)
DTW为(Dynamic Time Warping,动态时间归准)的简称.应用很广,主要是在模板匹配中,比如说用在孤立词语音识别,计算机视觉中的行为识别,信息检索等中.可能大家学过这些类似的课程都看到 ...
- [session篇]看源码学习session(一)
假如你是使用过或学习过PHP,你一定觉得很简单.session只不过是$_SESSION就可以搞得,这还不简单只是对一个key-value就能工作了.我觉得可以大多数的phper都是这样的,这是语言本 ...
- AspxGridView 表中的ASPxHyperLink不导出到excel
在软件中 因为要连接到其他的页面所以类型转成了ASPxHyperLink,但是用官方的导出控件导出到excel之后,连接依旧保留着, 目的:去除导出来的连接 方法:把之前的ASPxHyperLink转 ...
- spring mvc注解文件上传下载
需要两个包: 包如何导入就不介绍了,前端代码如下(一定要加enctype="multipart/form-data"让服务器知道是文件上传): <form action=&q ...
- linux命令(10):ps命令
1.查看mysql进程数: ps -ef | grep "mysql" | grep -v "grep" | wc –l 2.监控CPU状态:ps –au 3. ...