BZOJ 2179FFT快速傅立叶
传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2179
题目大意:给出两个n位10进制整数x和y,你需要计算x*y。
题解:FFT,不会的可以膜拜陈老师(非clj)QQ:297086016
代码:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#define inf 1<<30
#define maxm 270005
#define pi acos(-1)
using namespace std;
struct F{
double rea,ima;
F operator +(const F &x){return (F){rea+x.rea,ima+x.ima};}
F operator -(const F &x){return (F){rea-x.rea,ima-x.ima};}
F operator *(const F &x){return (F){rea*x.rea-ima*x.ima,rea*x.ima+ima*x.rea};}
}a[maxm],b[maxm],c[maxm],w,wn,t1,t2;
int n,m,l,ans[maxm],rev[maxm];
void read(F *a)
{
char ch;
while (ch=getchar(),ch<''||ch>'');
for (int i=m-; ch>=''&&ch<='';ch=getchar(),i--) a[i].rea=ch-'';
}
int re(int v)
{
int t=;
for (int i=; i<l; i++) t<<=,t|=v&,v>>=;
return t;
}
void fft(F *a,int type)
{
for (int i=; i<n; i++) if (i<rev[i]) swap(a[i],a[rev[i]]);
for (int s=; s<=n; s<<=)
{
wn=(F){cos(type**pi/s),sin(type**pi/s)};
for (int i=; i<n; i+=s)
{
w=(F){,};
for (int j=i; j<(i+(s>>)); j++,w=w*wn)
{
t1=a[j],t2=w*a[j+(s>>)];
a[j]=t1+t2,a[j+(s>>)]=t1-t2;
}
}
}
}
int main()
{
scanf("%d\n",&m);
for (n=; n<(m<<); n<<=) l++;
for (int i=; i<n; i++) rev[i]=re(i);
read(a); read(b);
fft(a,); fft(b,);
for (int i=; i<n; i++) c[i]=a[i]*b[i];
fft(c,-);
for(int i=;i<n;i++) ans[i]=int(c[i].rea/n+0.5);
for(int i=;i<n;i++) ans[i+]+=ans[i]/,ans[i]=ans[i]%;
int pps=n-;while(ans[pps]==&&pps)pps--;
for(;pps>=;pps--)printf("%d",ans[pps]);printf("\n");
return ;
}
BZOJ 2179FFT快速傅立叶的更多相关文章
- BZOJ 2194 快速傅立叶变换之二 | FFT
BZOJ 2194 快速傅立叶变换之二 题意 给出两个长为\(n\)的数组\(a\)和\(b\),\(c_k = \sum_{i = k}^{n - 1} a[i] * b[i - k]\). 题解 ...
- bzoj 2194: 快速傅立叶之二 -- FFT
2194: 快速傅立叶之二 Time Limit: 10 Sec Memory Limit: 259 MB Description 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k & ...
- [BZOJ]2194: 快速傅立叶之二
题目大意:给定序列a,b,求序列c满足c[k]=sigma(a[i]*b[i-k]) (k<=i<n).(n<=10^5) 思路:观察发现就是普通的卷积反一反(翻转ab其中一个后做卷 ...
- 【刷题】BZOJ 2194 快速傅立叶之二
Description 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5. a,b中的元素均为小于等于100的非 ...
- BZOJ.2194.快速傅立叶之二(FFT 卷积)
题目链接 \(Descripiton\) 给定\(A[\ ],B[\ ]\),求\[C[k]=\sum_{i=k}^{n-1}A[i]*B[i-k]\ (0\leq k<n)\] \(Solut ...
- bzoj 2194 快速傅立叶之二 —— FFT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2194 如果把 a 序列翻转,则卷积得到的是 c[n-i],再把得到的 c 序列翻转即可. 代 ...
- BZOJ 2194 快速傅立叶之二 ——FFT
[题目分析] 咦,这不是卷积裸题. 敲敲敲,结果样例也没过. 看看看,卧槽i和k怎么反了. 艹艹艹,把B数组取个反. 靠靠靠,怎么全是零. 算算算,最终的取值范围算错了. 交交交,总算是A掉了. [代 ...
- bzoj 2194: 快速傅立叶之二【NTT】
看别的blog好像我用了比较麻烦的方法-- (以下的n都--过 \[ c[i]=\sum_{j=i}^{n}a[i]*b[j-i] \] 设j=i+j \[ c[i]=\sum_{j=0}^{n-i} ...
- 【CodeVS 3123】高精度练习之超大整数乘法 &【BZOJ 2197】FFT快速傅立叶
第一次写法法塔,,,感到威力无穷啊 看了一上午算导就当我看懂了?PS:要是机房里能有个清净的看书环境就好了 FFT主要是用了巧妙的复数单位根,复数单位根在复平面上的对称性使得快速傅立叶变换的时间复杂度 ...
随机推荐
- Unity中www的基本应用
Unity的www主要支持HTTP中的GET和POST方式,GET方式会将请求附加到URL后,POST方式则是通过FORM的形式提交. 以下为Unity客户端的信息: using UnityEngin ...
- Android Stduio的使用(七)--Structure窗口
1.本篇博文介绍Android查看.Java文件中所有属性和类方法的工具:Structure窗口 2.我们知道Eclipse的OutLine窗口可以查看.java文件所有的属性和方法. 2.Andro ...
- qemu -hda /dev/sdc -m 1024 -vga std
同事拿了个烂u盘让我给他做个启动盘,用cp *.iso /dev/sdc怎么也启动不了. 改用dd if=copied/20140923/debian-7.6.0-amd64-DVD-1.iso of ...
- 3个普通IO识别22个按键试验(转)
源:http://www.amobbs.com/forum.php?mod=viewthread&tid=2243715 吸取各位前辈的经验,将之前二极管用量多的问题优化一下,目前不用二极管能 ...
- HTML 引用Css样式的四种方式
不才,只知道HTML引用CSS样式有四种方式,内部引用和外部引用各两种,因为老是忘记细节,记下了随时翻阅亦可方便如我般的初学者 内部引用方式1: 直接在标签内用 style 引用,如: <div ...
- Fox And Names
Description Fox Ciel is going to publish a paper on FOCS (Foxes Operated Computer Systems, pronounce ...
- Python 100例(下)
如果你坚持到这了,哪就为自己鼓掌吧!坚持,你一定可以. 实例51: 题目:学习使用按位与&. #!/usr/bin/env python# --*--coding:utf-8 --*--'' ...
- android usb挂载分析---vold处理内核消息
android usb挂载分析---vold处理内核消息 分类: u盘挂载2012-03-29 22:25 3215人阅读 评论(0) 收藏 举报 androidactioniteratordiskd ...
- php 系列
1.给 跑在windows 环境下的php, 安装redis 拓展.(installing Redis & Redis extension in PHP on XAMPP on windows ...
- javascript中0.01*2324=23.240000000000002 ?
js中的乘法运算的小问题 0.01*2324=23.240000000000002 ? , 结果为什么出现这么多小数位呢?