FFT模板,原理不难,优质讲解很多,但证明很难看太不懂

这模板题在bzoj竟然是土豪题,服了

 #include <cmath>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define dd double
#define ll long long
#define N (1<<21)+10
using namespace std; int n,m,ma;
int r[N];
dd const pi=acos(-);
struct cp{
dd x,y;
cp(dd a,dd b):x(a),y(b){}
cp(){}
cp operator+(const cp &a){return cp(x+a.x,y+a.y);}
cp operator-(const cp &a){return cp(x-a.x,y-a.y);}
cp operator*(const cp &a){return cp(x*a.x-y*a.y,x*a.y+y*a.x);}
}a[N],b[N],c[N];
void FFT(cp s[],int len,int type)
{
for(int i=;i<len;i++)
if(i<r[i]) swap(s[i],s[r[i]]);
for(int k=;k<=len;k<<=)
{
cp wn(cos(*pi*type/k),sin(*pi*type/k));
for(int i=;i<len;i+=k)
{
cp t,w(,);
for(int j=;j<(k>>);j++,w=w*wn)
{
t=w*s[i+j+(k>>)];
s[i+j+(k>>)]=s[i+j]-t;
s[i+j]=s[i+j]+t;
}
}
}
}
void FFT_main(cp A[],cp B[],cp C[],int len)
{
FFT(A,len,);FFT(B,len,);
for(int i=;i<len;i++) C[i]=A[i]*B[i];
FFT(C,len,-);
} int gc()
{
int rett=,fh=;char c=getchar();
while(c<''||c>''){if(c=='-')fh=-;c=getchar();}
while(c>=''&&c<=''){rett=(rett<<)+(rett<<)+c-'';c=getchar();}
return rett*fh;
} int main()
{
n=gc(),m=gc(),ma=,n++,m++;
for(int i=;i<n;i++) a[i].x=1.0*gc();
for(int i=;i<m;i++) b[i].x=1.0*gc();
while((<<ma)<n+m){ma++;}
for(int i=;i<(<<ma);i++)
r[i]=(r[i>>]>>)|((i&)<<(ma-));
FFT_main(a,b,c,<<ma);
for(int i=;i<n+m-;i++) printf("%d ",(int)(c[i].x/(<<ma)+0.1));
return ;
}

最新文章

  1. [转载]盒模型display:-webkit-box;的使用
  2. paip.lucene 4.3 中文语义搜索最佳实践
  3. 【CodeForces 699D】Fix a Tree
  4. iScroll4.2.5中的无法滑动或点击的解决方案(转)
  5. 【原】基于 HAproxy 1.6.3 Keeplived 在 Centos 7 中实现mysql mariadb galera cluster 集群分发读写 —— 上篇
  6. [Redux] Accessing Dispatch and State with Redux -- connect
  7. HDU-2298 Toxophily (三分法入门系列)
  8. css一些简单的例子
  9. nginx系列 3 nginx.conf介绍(1)
  10. [物理学与PDEs]第4章第3节 一维反应流体力学方程组 3.1 一维反应流体力学方程组
  11. Practical Node.js (2018版) 第9章: 使用WebSocket建立实时程序,原生的WebSocket使用介绍,Socket.IO的基本使用介绍。
  12. 618大促微服务、web、redis等的超时时间
  13. 利用存储过程来重命名SQL Server数据库
  14. CryptoZombies学习笔记——Lesson2
  15. 一个分布式 MySQL Binlog 存储系统的架构设计
  16. Linux下编辑利器vim,vimrc,viminfo的高级用法
  17. Spring InitializingBean和ApplicationListener&lt;ContextRefreshedEvent&gt;
  18. laravel5.4学习--laravel目录结构
  19. java继承-final关键词用法
  20. PAT (Basic Level) Practice 1009 说反话

热门文章

  1. 配置mysql允许远程访问
  2. iptables防火墙和selinux
  3. 基于Tags的简单内容推荐的实现
  4. alsa-lib 交叉编译以及声卡驱动测试 (转)
  5. 面试准备专题——JVM,类编译,类加载,内存错误
  6. react 简单在页面中输出一段文字
  7. 【hiho一下 第八周】状态压缩·一
  8. 使用Spring Initializer快速创建Spring Boot项目
  9. Blade - 腾讯开源的构建系统 c/c++编译环境
  10. SQL 递归使用