博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[bzoj2179]FFT快速傅立叶_FFT
阅读量:5275 次
发布时间:2019-06-14

本文共 1725 字,大约阅读时间需要 5 分钟。

FFT快速傅立叶 bzoj-2179

题目大意:给出两个n位10进制整数x和y,你需要计算x*y。

注释:$1\le n\le 6\times 10^4$。


想法

$FFT$入门题。

$FFT$实现的就是多项式乘法,进而我们可以通过它优化卷积。

但是有一点:$FFT$优化的卷积是所有的都求出来而不能单独优化一次。

比如说:$c_i=\sum_{j=0}^i a_j\times b_{i-j}$。

$FFT$可以在$O(nlogn)$的时间内求出所有的$c$,但是不能只求一个。

附上$FFT$的模板:

typedef double db;const db pi=acos(-1);struct cp{	db x,y;	cp() {x=y=0;}	cp(db x_,db y_) {x=x_,y=y_;}	cp operator + (const cp &a) const {return cp(x+a.x,y+a.y);}	cp operator - (const cp &a) const {return cp(x-a.x,y-a.y);}	cp operator * (const cp &a) const {return cp(x*a.x-y*a.y,x*a.y+y*a.x);}};void fft(cp *a,int len,int flg){	int i,j,k,t;	cp w,wn,tmp;	for(i=k=0;i
k) swap(a[i],a[k]); for(j=len>>1;(k^=j)
>=1); } for(k=2;k<=len;k<<=1) { t=k>>1; wn=cp(cos(2*pi*flg/k),sin(2*pi*flg/k)); for(i=0;i

 而这个题就是将每一位看成多项式的系数,然后用$FFT$算多项式乘法即可,注意进位。

#include 
#include
#include
#include
#include
#define N 60010 using namespace std; typedef double db;char s1[N<<1],s2[N<<1];int ans[N<<2];const db pi=acos(-1);struct cp{ db x,y; cp() {x=y=0;} cp(db x_,db y_) {x=x_,y=y_;} cp operator + (const cp &a) const {return cp(x+a.x,y+a.y);} cp operator - (const cp &a) const {return cp(x-a.x,y-a.y);} cp operator * (const cp &a) const {return cp(x*a.x-y*a.y,x*a.y+y*a.x);}}a[N<<2],b[N<<2];void fft(cp *a,int len,int flg){ int i,j,k,t; cp tmp,w,wn; for(i=k=0;i
k) swap(a[i],a[k]); for(j=len>>1;(k^=j)
>=1); } for(k=2;k<=len;k<<=1) { wn=cp(cos(2*pi*flg/k),sin(2*pi*flg/k)); t=k>>1; for(i=0;i
> n ; int len=1; while(len<=(n<<1)) len<<=1; scanf("%s%s",s1,s2); for(int i=0;i

 小结:$FFT$贼好玩....

转载于:https://www.cnblogs.com/ShuraK/p/10011625.html

你可能感兴趣的文章
大四java实习生的一些经历
查看>>
线程池的概念
查看>>
Oracle_Statspack性能诊断工具
查看>>
Java 序列化
查看>>
Java 时间处理实例
查看>>
Java 多线程编程
查看>>
Java 数组实例
查看>>
mysql启动过程
查看>>
2017前端面试题总结
查看>>
Http GetPost网络请求
查看>>
SWIFT国际资金清算系统
查看>>
Sping注解:注解和含义
查看>>
站立会议第四天
查看>>
如何快速掌握一门技术
查看>>
利用AMPScript获取Uber用户数据的访问权限
查看>>
vagrant 同时设置多个同步目录
查看>>
python接口自动化28-requests-html爬虫框架
查看>>
生成随机数的模板
查看>>
Mysql 数据库操作
查看>>
转:linux终端常用快捷键
查看>>