题目链接:P3803 【模板】多项式乘法(FFT)

题意

给定一个 \(n\) 次多项式 \(F(x)\) 和一个 \(m\) 次多项式 \(G(x)\),求 \(F(x)\) 和 \(G(x)\) 的卷积。

思路

FFT

又是一道 \(FFT\) 的模板题,不过用递归的 \(FFT\) 会超时。

代码

#include <bits/stdc++.h>
using namespace std; const double PI = acos(-1);
typedef complex<double> Complex;
const int maxn = 3e6 + 10; Complex a[maxn], b[maxn];
int m, n;
int bit = 2, rev[maxn]; inline int read() {
char c = getchar(); int x = 0, f = 1;
while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();}
while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
return x * f;
} void get_rev(){
while(bit <= n + m) bit <<= 1;
for(int i = 0; i < bit; ++i) {
rev[i] = (rev[i >> 1] >> 1) | (bit >> 1) * (i & 1);
}
} void FFT(Complex *a, int op) {
for(int i = 0; i < bit; ++i) {
if(i < rev[i]) swap(a[i], a[rev[i]]);
}
for(int mid = 1; mid < bit; mid <<= 1) { // 左右两部分的区间长度
Complex wn = Complex(cos(PI / mid), op * sin(PI / mid)); // 单位复数根
for(int j = 0; j < bit; j += mid<<1) { // 一组一组处理
Complex w(1, 0);
for(int k = 0; k < mid; ++k, w = w * wn) {
Complex x = a[j + k], y = w * a[j + k + mid]; // 蝴蝶操作
a[j + k] = x + y, a[j + k + mid] = x - y;
}
}
}
} int main() {
n = read(), m = read();
for(int i = 0; i <= n; ++i) {
a[i] = read();
}
for(int i = 0; i <= m; ++i) {
b[i] = read();
}
get_rev();
FFT(a, 1);
FFT(b, 1);
for(int i = 0; i <= bit; ++i) {
a[i] *= b[i];
}
FFT(a, -1);
for(int i = 0; i <= n + m; ++i) {
printf("%d ", (int)(a[i].real() / bit + 0.5));
}
printf("\n");
return 0;
}

最新文章

  1. malloc 与 free函数详解&lt;转载&gt;
  2. android自定义控件(9)-Android触摸事件分发机制
  3. 【GruntMate】一个让你更方便使用Grunt的工具
  4. [MaxOSX] 路由操作
  5. centos将自编译安装的apache添加为linux系统服务
  6. [terry笔记]RMAN综合学习之恢复
  7. Sql 执行删除修改之前添加备份
  8. linux入门教程(三) Linux操作系统的安装
  9. NOIP2005 篝火晚会
  10. android驱动[置顶] 我的DIY Android之旅--驱动并控制你的Android开发板蜂鸣器
  11. CentOS7配置Nodejs环境安装记录
  12. iframe标签使用总结与注意问题
  13. HDU 1253 胜利大逃亡(BFS)
  14. Nodejs mongodb 管理组件adminmongodb
  15. Linux高性能server编程——信号及应用
  16. 传统IO与NIO(channel-to-channel)文件拷贝的探索与性能比对
  17. javascript的数组之push()
  18. Android Spannable为同一TextView设直不同样式
  19. 【Java基本功】聊聊抽象类和接口的区别
  20. poj 1789 prime

热门文章

  1. LInux终端中Ctrl+S卡死
  2. Loadrunner test web service which need username and password
  3. apache虚拟主机配置及解析
  4. 把多个JavaScript函数绑定到onload事件处理函数上的技巧
  5. springboot整合jsp 遇到的问题
  6. Rabbitmq的延时队列的使用
  7. linux nohup python 后台运行无输出问题
  8. bat批处理----copy和xcopy区别
  9. 最新版react16.9中按需加载antd和使用less
  10. 微信小程序の条件渲染