传送门: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快速傅立叶的更多相关文章

  1. BZOJ 2194 快速傅立叶变换之二 | FFT

    BZOJ 2194 快速傅立叶变换之二 题意 给出两个长为\(n\)的数组\(a\)和\(b\),\(c_k = \sum_{i = k}^{n - 1} a[i] * b[i - k]\). 题解 ...

  2. bzoj 2194: 快速傅立叶之二 -- FFT

    2194: 快速傅立叶之二 Time Limit: 10 Sec  Memory Limit: 259 MB Description 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k & ...

  3. [BZOJ]2194: 快速傅立叶之二

    题目大意:给定序列a,b,求序列c满足c[k]=sigma(a[i]*b[i-k]) (k<=i<n).(n<=10^5) 思路:观察发现就是普通的卷积反一反(翻转ab其中一个后做卷 ...

  4. 【刷题】BZOJ 2194 快速傅立叶之二

    Description 请计算C[k]=sigma(a[i]*b[i-k]) 其中 k < = i < n ,并且有 n < = 10 ^ 5. a,b中的元素均为小于等于100的非 ...

  5. BZOJ.2194.快速傅立叶之二(FFT 卷积)

    题目链接 \(Descripiton\) 给定\(A[\ ],B[\ ]\),求\[C[k]=\sum_{i=k}^{n-1}A[i]*B[i-k]\ (0\leq k<n)\] \(Solut ...

  6. bzoj 2194 快速傅立叶之二 —— FFT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2194 如果把 a 序列翻转,则卷积得到的是 c[n-i],再把得到的 c 序列翻转即可. 代 ...

  7. BZOJ 2194 快速傅立叶之二 ——FFT

    [题目分析] 咦,这不是卷积裸题. 敲敲敲,结果样例也没过. 看看看,卧槽i和k怎么反了. 艹艹艹,把B数组取个反. 靠靠靠,怎么全是零. 算算算,最终的取值范围算错了. 交交交,总算是A掉了. [代 ...

  8. 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} ...

  9. 【CodeVS 3123】高精度练习之超大整数乘法 &【BZOJ 2197】FFT快速傅立叶

    第一次写法法塔,,,感到威力无穷啊 看了一上午算导就当我看懂了?PS:要是机房里能有个清净的看书环境就好了 FFT主要是用了巧妙的复数单位根,复数单位根在复平面上的对称性使得快速傅立叶变换的时间复杂度 ...

随机推荐

  1. hdu_5179_beautiful number(数位DP)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5179 题意:给你一个范围,问你漂亮的数有多少个,漂亮的数的定义为 数位高的比数位低的大,并且 数位高的 ...

  2. Java项目开发第二天

    相对来说今天还是轻松了挺多的,好了,刚刚跑完步,今天心情不错,直接进入主题,就不废话了. (PS:室友都去准备迎新了,老大也是,还好都将课本留给我了,可以好好的看看书了,好好学习,天天向上.) 图形用 ...

  3. 文件I/O的操作实例

    1_open.c: #include <sys/types.h> #include <stdio.h> #include <sys/stat.h> #include ...

  4. Sybase数据库的分页功能

    项目中需要用到Sybase数据库的分页功能,想尽各种办法都没有成功,最后用如下的存储过程成功实现功能,记录备忘. ),@start int, @pageSize int as begin declar ...

  5. WEKA使用教程(经典教程转载)

    http://blog.csdn.net/yangliuy/article/details/7589306 WEKA使用教程(经典教程转载) 标签: lift算法csv数据挖掘class任务 2012 ...

  6. svn branching and merging

    the svn switch command is an alternative way to creating a working copy of a branch :) You can merge ...

  7. js中焦点的含义是什么

    焦点即是光标   焦点是在页面上屏幕中闪动的的小竖线,鼠标点击可获得光标,Tab键可按照设置的Tabindex切换焦点

  8. 汇总博客常见的api接口地址(windows live write)

    汇总博客常见的api接口地址(windows live write) 1. cnblogs 日志地址,直接输入 http://www.cnblogs.com/xxxxx/ api接口 http://w ...

  9. java如何计算程序运行时间

    long startTime = System.currentTimeMillis();    //获取开始时间 doSomething();    //测试的代码段 long endTime = S ...

  10. 使用PHPmailer 发送邮件,使用QQ smtp服务器

    <meta charset="utf-8"> <?php include("class.phpmailer.php"); include(&q ...