2179: FFT快速傅立叶

Time Limit: 10 Sec  Memory Limit: 259 MB
Submit: 2923  Solved: 1498
[Submit][Status][Discuss]

Description

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

Input

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

Output

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

Sample Input

1
3
4

Sample Output

12

数据范围:
n<=60000

HINT

Source

[Submit][Status][Discuss]

FFT模板

  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int maxn = ;
  6. const double pi = acos(-);
  7. typedef complex<double> Complex;
  8.  
  9. int n, m, len;
  10. int ans[maxn];
  11. int rev[maxn];
  12. char str[maxn];
  13.  
  14. Complex a[maxn];
  15. Complex b[maxn];
  16.  
  17. inline void calculateFFT(Complex *c, double f)
  18. {
  19. for (int i = ; i < n; ++i)
  20. if (i < rev[i])swap(c[i], c[rev[i]]);
  21.  
  22. for (int i = ; i < n; i <<= )
  23. {
  24. Complex wn(cos(pi/i), f*sin(pi/i));
  25.  
  26. for (int j = ; j < n; j += (i << ))
  27. {
  28. Complex wk(, );
  29.  
  30. for (int k = ; k < i; ++k, wk *= wn)
  31. {
  32. Complex x = c[j + k];
  33. Complex y = c[i + j + k] * wk;
  34. c[j + k] = x + y;
  35. c[i + j + k] = x - y;
  36. }
  37. }
  38. }
  39. }
  40.  
  41. signed main(void)
  42. {
  43. scanf("%d", &n);
  44.  
  45. scanf("%s", str);
  46.  
  47. for (int i = ; i < n; ++i)
  48. a[i] = str[n - i - ] - '';
  49.  
  50. scanf("%s", str);
  51.  
  52. for (int i = ; i < n; ++i)
  53. b[i] = str[n - i - ] - '';
  54.  
  55. m = n << ;
  56. for (n = ; n < m; )
  57. ++len, n <<= ;
  58.  
  59. for (int i = ; i < n; ++i)
  60. {
  61. rev[i] |= rev[i >> ] >> ;
  62. rev[i] |= (i&) << (len - );
  63. }
  64.  
  65. calculateFFT(a, );
  66. calculateFFT(b, );
  67.  
  68. for (int i = ; i < n; ++i)
  69. a[i] *= b[i];
  70.  
  71. calculateFFT(a, -);
  72.  
  73. for (int i = ; i < n; ++i)
  74. a[i] /= n;
  75.  
  76. for (int i= ; i < m; ++i)
  77. ans[i] = int(a[i].real() + 0.5);
  78.  
  79. while (!ans[m - ])--m;
  80.  
  81. for (int i = ; i < m; ++i)
  82. if (ans[i] >= )
  83. {
  84. ans[i + ] += ans[i]/;
  85. ans[i] %= ;
  86. }
  87.  
  88. if (!ans[m])--m;
  89.  
  90. for (int i = m; ~i; --i)
  91. putchar('' + ans[i]);
  92. }

@Author: YouSiki

BZOJ 2179: FFT快速傅立叶的更多相关文章

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

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

  2. BZOJ 2179 FFT快速傅立叶 题解

    bzoj 2179 Description 给出两个n位10进制整数x和y,你需要计算x*y. [题目分析] 高精裸题.练手. [代码] 1.手动高精 #include<cstdio> # ...

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

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

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

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

  5. 【刷题】BZOJ 2179 FFT快速傅立叶

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

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

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

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

    http://www.lydsy.com/JudgeOnline/problem.php?id=2179 fft裸题.... 为嘛我的那么慢....1000多ms.. #include <cst ...

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

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

  9. 【BZOJ2179】FFT快速傅立叶

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

随机推荐

  1. 基于Ruby的Watir-WebDriver自动化测试方案

    Watir-WebDriver       —— 软件测试的自动化时代 QQ群:160409929 自动化测试方案书 系统架构 该自动化测试框架分三个模块:Test用例.Control控制层.Tool ...

  2. 转载文档:Storm实战常见问题及解决方案

    该文档为实实在在的原创文档,转载请注明: http://blog.sina.com.cn/s/blog_8c243ea30101k0k1.html 类型 详细 备注 该文档是群里几个朋友在storm实 ...

  3. fillStyle图片填充

    图片自找 <!DOCTYPE HTML> <head> <meta charset = "utf-8"> <title>canvas ...

  4. Red Hat Enterprise Linux 6.6安装体验

    Red Hat Enterprise Linux 6.6的安装首界面有五个选项,这跟以前的Red Hat Enterprise Linux 5.x的安装界面是有一些区别的.   安装或者升级现有系统( ...

  5. .NET重构(类型码的设计、重构方法)

    阅读目录: 1.开篇介绍 2.不影响对象中的逻辑行为(枚举.常量.Entity子类来替代类型码) 3.影响对象中的逻辑行为(抽象出类型码,使用多态解决) 4.无法直接抽象出类型码(使用策略模式解决) ...

  6. MySQL有关Group By的优化

    昨天我写了有关MySQL的loose index scan的相关博文(http://www.cnblogs.com/wingsless/p/5037625.html),后来我发现上次提到的那个优化方法 ...

  7. hibernate 注解 唯一键约束 uniqueConstraints

    @Table 注解包含一个schema和一个catelog 属性,使用@UniqueConstraints 可以定义表的唯一约束. 如果是联合约束就用下面这种 @Table(name="tb ...

  8. jackson annotations注解详解

    jackson中常用到的注解 猛击下面的连接地址 http://blog.csdn.net/sdyy321/article/details/40298081

  9. 学习Linux的编码风格

    对于编码,每个码农或许都会有自己的一套风格,很多人可能对编码风格压根就不关心,因为最终编译器编译出来的目标代码并不会受影响.但是在开发一个大型项目时,花费时间成本最多的永远是开发者们之间的沟通与交流. ...

  10. http 状态码含义

    HTTP状态码被分为五大类, 目前我们使用的HTTP协议版本是1.1, 支持以下的状态码.随着协议的发展,HTTP规范中会定义更多的状态码. 小技巧: 假如你看到一个状态码518, 你并不知道具体51 ...