wikioi 3132 高精度乘法(FFT)
第一次学FFT,先膜拜一下法法塔大神ORZ
关于FFT的话,有一篇博文特别赞http://z55250825.blog.163.com/blog/static/150230809201431274653644/
他后面还有关于高精度和jsoi2014 力的题解写的特别好
其次算导讲的真的不错
不过这篇博文讲得更算导差不多了ORZ
直接上代码吧
尼玛重载运算符老写错QAQ
好吧突然发现以前有一点错误,然后插了别人的代码来check,后来自己的就没了= = sorry
CODE:
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#define pi acos(-1.0)
using namespace std;
#define maxn 400010
struct com{
double r,i;
com(double real=0.0,double imag=0.0){
r=real,i=imag;
}
com operator + (const com x){
return com(x.r+r,i+x.i);
}
com operator - (const com x){
return com(r-x.r,i-x.i);
}
com operator * (const com x){
return com(x.r*r-x.i*i,r*x.i+i*x.r);
}
}x1[maxn*2],x2[maxn*2];
bool bo[maxn*2];
int bitrev(com *a,int l){
memset(bo,0,sizeof(bo));//O(logn)的在后面
for(int i=1;i<l-1;i++){
int x=i,y=0;
int m=(int)log2(l)+0.1;
if(bo[x])continue;
while(m--){
y<<=1;
y|=(x&1);
x>>=1;
}
bo[i]=bo[y]=1;
swap(a[i],a[y]);
}
return 0;
}
void fft(com *y,int l,double on) // FFT O(nlogn)
// 其中on==1时为DFT,on==-1为IDFT
{
register int h,i,j,k;
com u,t;
bitrev(y,l); // 调用反转置换
for(h=2;h<=l;h<<=1) // 控制层数
{
// 初始化单位复根
com wn(cos(on*2*pi/h),sin(on*2*pi/h));
for(j=0;j<l;j+=h) // 控制起始下标
{
com w(1,0); // 初始化螺旋因子
for(k=j;k<j+h/2;k++) // 配对
{
u=y[k];
t=w*y[k+h/2];
y[k]=u+t;
y[k+h/2]=u-t;
w=w*wn; // 更新螺旋因子
} // 据说上面的操作叫蝴蝶操作…
}
}
if(on==-1) for(i=0;i<l;i++) y[i].r/=l; // IDFT
}
char a[maxn],b[maxn];
int sum[maxn*2];
int main(){
int l1,l2,l;
scanf("%s%s",a,b);
l1=strlen(a);l2=strlen(b);
l=1;
while (l<l1*2||l<l2*2) {
l<<=1;
}
for (int j=0;j<l1;j++) {
x1[j].r=a[l1-j-1]-'0';
x1[j].i=0.0;
}
for (int i=l1;i<l;i++) x1[i]=com(0.0,0.0);
for (int j=0;j<l2;j++) {
x2[j].r=b[l2-j-1]-'0';
x2[j].i=0.0;
}
for (int i=l2;i<l;i++) x2[i]=com(0.0,0.0);
fft(x1,l,1);
fft(x2,l,1);
for (int i=0;i<l;i++) {
x1[i]=x1[i]*x2[i];
}
fft(x1,l,-1);
for (int i=0;i<l;i++) sum[i]=x1[i].r+0.5;
for (int i=0;i<l;i++) {
sum[i+1]+=sum[i]/10;
sum[i]%=10;
}
l=l1+l2-1;
while(sum[l]<=0 && l>0) l--; // 检索最高位
for(int i=l;i>=0;i--) putchar(sum[i]+'0'); // 倒序输出
return 0;
}
wikioi 3132 高精度乘法(FFT)的更多相关文章
- 高精度乘法(FFT)
学会了FFT之后感觉自己征服了世界! 当然是幻觉... 不过FFT还是很有用的,在优化大规模的动规问题的时候有极大效果. 一般比较凶残的计数动规题都需要FFT(n<=1e9). 下面是高精度乘法 ...
- FFT实现高精度乘法
你应该知道$FFT$是用来处理多项式乘法的吧. 那么高精度乘法和多项式乘法有什么关系呢? 观察这样一个$20$位高精度整数$11111111111111111111$ 我们可以把它处理成这样的形式:$ ...
- P1919 FFT加速高精度乘法
P1919 FFT加速高精度乘法 传送门:https://www.luogu.org/problemnew/show/P1919 题意: 给出两个n位10进制整数x和y,你需要计算x*y. 题解: 对 ...
- [vijos P1040] 高精度乘法
如果这次noip没考好,完全是因为从7月29日之后就没有再写过程序了.说起来,真是一个泪流满面的事实… 那这样一个弱智题练手恢复代码能力,竟然还花了我两个晚上(当然不是两整个晚上…) 第一天TLE了, ...
- 【PKU1001】Exponentiation(高精度乘法)
Exponentiation Time Limit: 500MS Memory Limit: 10000K Total Submissions: 145642 Accepted: 35529 ...
- hdu 1042 N!(高精度乘法 + 缩进)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1042 题目大意:求n!, n 的上限是10000. 解题思路:高精度乘法 , 因为数据量比较大, 所以 ...
- hdu 1042 N!(高精度乘法)
Problem Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input One N in ...
- Vijos 1040 高精度乘法
描述 高精度乘法 输入:两行,每行表示一个非负整数(不超过10000位) 输出:两数的乘积. 样例1 样例输入1 99 101 样例输出1 9999 题解 这道题和之前的Vijos 1010 清帝之惑 ...
- 【POJ 1001】Exponentiation (高精度乘法+快速幂)
BUPT2017 wintertraining(15) #6A 题意 求\(R^n\) ( 0.0 < R < 99.999 )(0 < n <= 25) 题解 将R用字符串读 ...
随机推荐
- 最基本的SQL语法/语句
DDL—数据定义语言(Create,Alter,Drop,DECLARE) DML—数据操纵语言(Select,Delete,Update,Insert) DCL—数据控制语言(GRANT,REVOK ...
- IOS开发-UI学习-UIFont,字体设置及批量创建控件
在IOS 中,使用[UIFont familyNames]这个方法获取72种系统字体. 使用[UIFont fontWithName:@"Zapfino" size:18]这个方法 ...
- PreparedStatement接口
从实际来讲,Statement现在已经不使用了,他已经称为了历史. Statement执行关键性问题在于他需要一个完整 的字符串定义要使用的SQL语句,而PreparedStatement可以动态的设 ...
- 二级横向菜单实现——ListView
实现类似于大众点评客户端的横向listview二级列表 这种横向的listview二级列表在手机软件上还不太常见,但是使用过平板的都应该知道,在平板上市比较常见的.可能是因为平板屏幕比较大,而且也能展 ...
- UVa 10405 & POJ 1458 Longest Common Subsequence
求最长公共子序列LCS,用动态规划求解. UVa的字符串可能含有空格,开始用scanf("%s", s);就WA了一次...那就用gets吧,怪不得要一行放一个字符串呢. (本来想 ...
- [Angular Tutorial] 1-Static Template
为了说明Angular如何扩展了标准的html,您将会创建了一个纯粹的静态html页面,并且看到我们如何将这些html代码转换成Angular能动态展示相同结果的模板. 在这一步您将会在一个html页 ...
- 【Xilinx-VDMA模块学习】-01- VDMA IP的GUI配置介绍
使用的是Vivado 2015.4,XC7Z020, AXI Video Direct Memory Acess(6.2). 在我的系统中,GUI配置图片如下:(其实和默认配置没有太大区别) 下面介绍 ...
- Android环境搭建与HelloWorld
引言 本系列适合0基础的人员,因为我就是从0开始的,此系列记录我步入Android开发的一些经验分享,望与君共勉!作为Android队伍中的一个新人的我,如果有什么不对的地方,还望不吝赐教. 在开始A ...
- 1.4.2. 实现 Core Data Helper 类(Core Data 应用程序实践指南)
该类分为四个部分:FILES.PATHS.SETUP.SAVING. 1.4.2.1. FILES 1.4.2.2. PATHS 1.4.2.3. SETUP 1.4.2.4. SAVING 1.4. ...
- Delphi 常用API 函数
Delphi 常用API 函数 AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小 AnyPopup 判断屏幕上是否存在任何弹出式窗口 ArrangeIconic ...