BZOJ_2179_FFT快速傅立叶_(FFT)
描述
http://www.lydsy.com/JudgeOnline/problem.php?id=2179
超大整数乘法
分析
FFT模板题.
把数字看成是多项式,x是10.然后用FFT做多项式乘法,最后进位就好了.
注意:
1.进位前要把每一位加0.5(或者更小),然后向下取整,应该是浮点数的计算误差吧...
#include <bits/stdc++.h>
using namespace std; const int maxn=;
const double pi=acos(-1.0);
int len;
int rev[maxn],ans[maxn];
char str[maxn];
struct cp{//复数(complex)
double r,i;
cp(double r_=0.0,double i_=0.0):r(r_),i(i_){}
cp operator + (const cp &x) const { return cp(r+x.r,i+x.i); }
cp operator - (const cp &x) const { return cp(r-x.r,i-x.i); }
cp operator * (const cp &x) const { return cp(r*x.r-i*x.i,r*x.i+i*x.r); }
}a[maxn],b[maxn],A[maxn];
void brc(int &len){//二进制逆序置换(bit-reverse-copy)
memset(rev,-,sizeof rev);
int k=,l=;
while(k<len) k<<=,l++;
len=k;
rev[]=; rev[len-]=len-;
for(int i=;i<len-;i++){
if(rev[i]!=-) continue;
int x=i,y=,m=l;
while(m--) y<<=, y|=(x&), x>>=;
rev[i]=y; rev[y]=i;
}
}
void dft(cp *a,int n,int flag){//离散傅里叶变换(discrete-Fourier-transform)
for(int i=;i<n;i++) A[rev[i]]=a[i];
for(int i=;i<n;i++) a[i]=A[i];
for(int m=;m<=n;m<<=){
cp wn(cos(2.0*pi/m*flag),sin(2.0*pi/m*flag));
for(int i=;i<n;i+=m){
cp w(1.0,0.0); int k=m>>;
for(int j=;j<k;j++){
cp t=w*a[i+j+k], u=a[i+j];
a[i+j]=u+t;
a[i+j+k]=u-t;
w=w*wn;
}
}
}
if(flag==-)for(int i=;i<n;i++) a[i].r/=n;
}
void readin(cp *a){
scanf("%s",str);
int l=strlen(str);
for(int i=;i<l;i++) a[i].r=str[l--i]-'';
}
int main(){
scanf("%d",&len);
len=len*-;
readin(a); readin(b);
brc(len);
dft(a,len,); dft(b,len,);
for(int i=;i<len;i++) a[i]=a[i]*b[i];
dft(a,len,-);
for(int i=;i<len;i++) ans[i]=a[i].r+0.5;
for(int i=;i<len;i++) ans[i+]+=ans[i]/, ans[i]%=;
len++;
while(!ans[len]&&len) len--;
for(int i=len;i>=;i--) printf("%d",ans[i]);
return ;
}
2179: FFT快速傅立叶
Time Limit: 10 Sec Memory Limit: 259 MB
Submit: 2567 Solved: 1308
[Submit][Status][Discuss]
Description
Input
第二行描述一个位数为n的正整数x。
第三行描述一个位数为n的正整数y。
Output
Sample Input
3
4
Sample Output
数据范围:
n<=60000
HINT
Source
BZOJ_2179_FFT快速傅立叶_(FFT)的更多相关文章
- 快速傅立叶变换(FFT)算法
已知多项式f(x)=a0+a1x+a2x2+...+am-1xm-1, g(x)=b0+b1x+b2x2+...+bn-1xn-1.利用卷积的蛮力算法,得到h(x)=f(x)g(x),这一过程的时间复 ...
- 【BZOJ】2179: FFT快速傅立叶(fft)
http://www.lydsy.com/JudgeOnline/problem.php?id=2179 fft裸题.... 为嘛我的那么慢....1000多ms.. #include <cst ...
- 快速傅立叶变换FFT模板
递归版 UOJ34多项式乘法 //容易暴栈,但是很好理解 #include <cmath> #include <iostream> #include <cstdio> ...
- 为什么要进行傅立叶变换?傅立叶变换究竟有何意义?如何用Matlab实现快速傅立叶变换
写在最前面:本文是我阅读了多篇相关文章后对它们进行分析重组整合而得,绝大部分内容非我所原创.在此向多位原创作者致敬!!!一.傅立叶变换的由来关于傅立叶变换,无论是书本还是在网上可以很容易找到关于傅立叶 ...
- BZOJ_2194_快速傅立叶之二_(FFT+卷积)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=2194 给出序列\(a[0],a[1],...,a[n-1]\)和\(b[0],b[1],... ...
- $\mathcal{FFT}$·$\mathcal{Fast \ \ Fourier \ \ Transformation}$快速傅立叶变换
\(2019.2.18upd:\) \(LINK\) 之前写的比较适合未接触FFT的人阅读--但是有几个地方出了错,大家可以找一下233 啊-本来觉得这是个比较良心的算法没想到这么抽搐这个算法真是将一 ...
- 快速傅立叶变换(FFT)
多项式 系数表示法 设\(f(x)\)为一个\(n-1\)次多项式,则 \(f(x)=\sum\limits_{i=0}^{n-1}a_i*x_i\) 其中\(a_i\)为\(f(x)\)的系数,用这 ...
- BZOJ 2179: FFT快速傅立叶
2179: FFT快速傅立叶 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 2923 Solved: 1498[Submit][Status][Di ...
- 【CodeVS 3123】高精度练习之超大整数乘法 &【BZOJ 2197】FFT快速傅立叶
第一次写法法塔,,,感到威力无穷啊 看了一上午算导就当我看懂了?PS:要是机房里能有个清净的看书环境就好了 FFT主要是用了巧妙的复数单位根,复数单位根在复平面上的对称性使得快速傅立叶变换的时间复杂度 ...
随机推荐
- 封装DB类
封装DB类 一般一个类单独书写在一个Php文件中,为了见名知意,会对文件名有一个规范:类名.class.php 第1步: 创建DB类 第2 步: 属性设计 第3步: 初 ...
- 洛谷 P1108 低价购买
P1108 低价购买 标签 动态规划 难度 提高+/省选- 题目描述 "低价购买"这条建议是在奶牛股票市场取得成功的一半规则.要想被认为是伟大的投资者,你必须遵循以下的问题建议:& ...
- ubuntu16.04无法连接无线的问题解决方式以及QQ的安装
0x01 首先我是安装了win10与ubuntu16.04的双系统,不过遇到的问题有启动项与无线连接的问题,今天说一下联网的问题. 连接宽带是正常的,只需要操作sudo pppoeconf 这条命令即 ...
- Windows Phone 动态改变ListBox样式
使用ListBox时通常会借助ItemTemplate帮助我们实现更复杂多样的样式显示,体现了Xaml的灵活.如何动态改变变ListBox的样式,实现类似电脑资源管理器中列表显示和图标显示形式的替换. ...
- QML鼠标区域控制
鼠标操作使用很多,下面给出一个示例: import QtQuick 2.4 import QtQuick.Controls 1.3 import QtQuick.Window 2.2 import Q ...
- Linux查找软件的安装路径
软件安装的路径可能不止一个,可以使用whereis命令查看软件安装的所有路径,以mysql为例: whereis mysql 该命令会返回软件的所有安装路径: mysql: /usr/bin/mysq ...
- csdn博客刷粉代码
原理是当有访客访问博客时,执行js实现自动加粉丝,达到刷粉的目的. <script src="http://code.jquery.com/jquery-1.4.1.min.js&qu ...
- IIS tilde directory enumeration 漏洞以及解决方案
2015年6月16日15:19:24 出现 IIS tilde directory enumeration 漏洞 Acunetix Web Vulnerability Scanner 9.5 测试出 ...
- CANVAS运用-对图片的压缩上传(仅针对移动浏览器)
最近在移动端设计头像上传功能时,原本是以<input type="file">直接通过formData上传,然而实际使用情况是:对于过大的图片(高像素手机所拍摄的照片等 ...
- web2py--------------用web2py写 django的例子 --------建立一个投票应用(1)
按照上一篇我们新建一个名为 polls 的app 然后文件结构如下 然后web2py 会自动向里边添加一些代码. 我们需要剔除一些,如这个 controllers ,defualt.py 的ind ...