题目描述

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

输入

第一行一个正整数n。 第二行描述一个位数为n的正整数x。 第三行描述一个位数为n的正整数y。

输出

输出一行,即x*y的结果。

样例输入

1
3
4

样例输出

12


题解

裸的FFT

然而压位会导致精度误差,很难改正,所以最好不要压位。

(我就是因为压位WA了无数次QAQ)

#include <cstdio>
#include <cmath>
#include <algorithm>
#define N 1 << 20
#define pi acos(-1)
using namespace std;
struct data
{
double x , y;
data() {x = y = 0;}
data(double x0 , double y0) { x = x0 , y = y0;}
data operator +(const data a)const {return data(x + a.x , y + a.y);}
data operator -(const data a)const {return data(x - a.x , y - a.y);}
data operator *(const data a)const {return data(x * a.x - y * a.y , x * a.y + y * a.x);}
}a[N] , b[N] , c[N];
char sa[N] , sb[N];
int ans[N];
void fft(data *a , int n , int flag)
{
int i , j , k = 0;
for(i = 0 ; i < n ; i ++ )
{
if(i > k) swap(a[i] , a[k]);
for(j = (n >> 1) ; (k ^= j) < j ; j >>= 1);
}
for(k = 2 ; k <= n ; k <<= 1)
{
data wn(cos(2 * pi * flag / k) , sin(2 * pi * flag / k));
for(i = 0 ; i <= n ; i += k)
{
data t , w(1 , 0);
for(j = 0 ; j < (k >> 1) ; j ++ , w = w * wn)
{
t = w * a[i + j + (k >> 1)];
a[i + j + (k >> 1)] = a[i + j] - t;
a[i + j] = a[i + j] + t;
}
}
}
}
int main()
{
int n , i , len;
scanf("%d%s%s" , &n , sa + 1 , sb + 1);
for(i = n ; i > 0 ; i -- )
a[n - i].x = a[n - i].x * 10 + sa[i] - '0' , b[n - i].x = b[n - i].x * 10 + sb[i] - '0';
for(len = 1 ; len <= (n << 1) ; len <<= 1);
fft(a , len , 1) , fft(b , len , 1);
for(i = 0 ; i < len ; i ++ ) c[i] = a[i] * b[i];
fft(c , len , -1);
for(i = 0 ; i < len ; i ++ ) ans[i] = (int)((c[i].x + 0.5) / len);
for(i = 0 ; i < len ; i ++ ) ans[i + 1] += ans[i] / 10 , ans[i] %= 10;
for(i = len - 1 ; i && !ans[i] ; i -- );
for( ; ~i ; i -- ) printf("%d" , ans[i]);
printf("\n");
return 0;
}

【bzoj2179】FFT快速傅立叶 FFT的更多相关文章

  1. 【bzoj2179】FFT快速傅立叶 FFT模板

    2016-06-01  09:34:54 很久很久很久以前写的了... 今天又比较了一下效率,貌似手写复数要快很多. 贴一下模板: #include<iostream> #include& ...

  2. 【BZOJ 2179】 2179: FFT快速傅立叶 (FFT)

    2179: FFT快速傅立叶 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 3308  Solved: 1720 Description 给出两个n位 ...

  3. bzoj 2179: FFT快速傅立叶 -- FFT

    2179: FFT快速傅立叶 Time Limit: 10 Sec  Memory Limit: 259 MB Description 给出两个n位10进制整数x和y,你需要计算x*y. Input ...

  4. BZOJ2179:FFT快速傅立叶(FFT)

    Description 给出两个n位10进制整数x和y,你需要计算x*y. Input 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数为n的正整数y. Output 输出 ...

  5. BZOJ2179: FFT快速傅立叶 FFT实现高精度乘法

    Code: #include <cstdio> #include <algorithm> #include <cmath> #include <cstring ...

  6. BZOJ 2179 FFT快速傅立叶 ——FFT

    [题目分析] 快速傅里叶变换用于高精度乘法. 其实本质就是循环卷积的计算,也就是多项式的乘法. 两次蝴蝶变换. 二进制取反化递归为迭代. 单位根的巧妙取值,是的复杂度成为了nlogn 范德蒙矩阵计算逆 ...

  7. bzoj 2179 FFT快速傅立叶 —— FFT

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2179 默写板子,注释的是忘记的地方. 代码如下: #include<iostream& ...

  8. 【BZOJ2179】FFT快速傅立叶

    [BZOJ2179]FFT快速傅立叶 Description 给出两个n位10进制整数x和y,你需要计算x*y. Input 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位 ...

  9. [bzoj2179]FFT快速傅立叶_FFT

    FFT快速傅立叶 bzoj-2179 题目大意:给出两个n位10进制整数x和y,你需要计算x*y. 注释:$1\le n\le 6\times 10^4$. 想法: $FFT$入门题. $FFT$实现 ...

随机推荐

  1. POJ 1631 Bridging signals(LIS的等价表述)

    把左边固定,看右边,要求线不相交,编号满足单调性,其实是LIS的等价表述. (如果编号是乱的也可以把它有序化就像Uva 10635 Prince and Princess那样 O(nlogn) #in ...

  2. Android(java)学习笔记84:SQLiteDatabase的query方法参数

    1. SQLiteDatabase的query方法: public Cursor query (boolean distinct, String table, String[] columns, St ...

  3. fast rcnn训练自己数据小结

    1.http://blog.csdn.net/hao529good/article/details/46544163   我用的训练好的模型参数是data/fast_rcnn__models/vgg_ ...

  4. modprobe与insmod的区别

    linux设备驱动有两种加载方式insmod和modprobe,下面谈谈它们用法上的区别1.insmod一次只能加载特定的一个设备驱动,且需要驱动的具体地址.写法为:        insmod dr ...

  5. 小波变换(wavelet transform)的通俗解释(一)

    小波变换 小波,一个神奇的波,可长可短可胖可瘦(伸缩平移),当去学习小波的时候,第一个首先要做的就是回顾傅立叶变换(又回来了,唉),因为他们都是频率变换的方法,而傅立叶变换是最入门的,也是最先了解的, ...

  6. js日期类型date

    javascript语言核心包括Date()构造函数,用来创建表示日期和时间的函数 //返回当前的日期和时间      var today = new Date();      //2011年1月1日 ...

  7. 5.7 并行复制配置 基于GTID 搭建中从 基于GTID的备份与恢复,同步中断处理

    5.7 并行复制配置 基于GTID 搭建中从 基于GTID的备份与恢复,同步中断处理 这个文章包含三个部分 1:gtid的多线程复制2:同步中断处理3:GTID的备份与恢复 下面文字相关的东西 大部分 ...

  8. PHP数据库扩展 - PDO操作

    PDO操作 PDO操作 描述:odp是php对数据库操作统一化的操作 语法:$pdo = new PDO("DB名:host=主机名;dbname=DB名","DB账号& ...

  9. MyElipes遇到 source not found解决方案

    在用Myeclipse 或者是eclipse进行开发时候经常遇到这个问题. File class editor  source not found问题.原因很简单,就是因为这是一个源码包,相应的没有编 ...

  10. Aliyun ECS简单的安装nginx(1.8.0)

    1. yum install gcc-c++ 2. yum install -y pcre pcre-devel 3. yum install -y zlib zlib-devel 4. yum in ...