P3803 【模板】多项式乘法(FFT)

题目描述

给定一个 n 次多项式 F(x),和一个 m 次多项式 G(x)。
请求出 F(x)和 G(x)的卷积。
从低到高输出F(x)*G(x)的系数
另一种问法:
如果有两个无限序列a和b,那么它们卷积的结果是:
求出yn值

题解:

模板题
建议背过模板
讲的非常不错的博客

代码:

#include <cmath>
#include <cctype>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;const int maxn=2e6+5;
const double pi=3.1415926535898;
int t, n, m, len=1, l, r[maxn*2];struct Cpx{  //复数double x, y;Cpx (double t1=0, double t2=0){ x=t1, y=t2; }
}A[maxn*2], B[maxn*2], C[maxn*2];
Cpx operator +(Cpx a, Cpx b){ return Cpx(a.x+b.x, a.y+b.y); }
Cpx operator -(Cpx a, Cpx b){ return Cpx(a.x-b.x, a.y-b.y); }
Cpx operator *(Cpx a, Cpx b){ return Cpx(a.x*b.x-a.y*b.y, a.x*b.y+a.y*b.x); }void fdft(Cpx *a, int n, int flag){  //快速将当前多项式从系数表达转换为点值表达for (int i=0; i<n; ++i) if (i<r[i]) swap(a[i], a[r[i]]);for (int mid=1; mid<n; mid<<=1){  //当前区间长度的一半Cpx w1(cos(pi/mid), flag*sin(pi/mid)), x, y;for (int j=0; j<n; j+=(mid<<1)){  //j:区间起始点Cpx w(1, 0);for (int k=0; k<mid; ++k, w=w*w1){  //系数转点值x=a[j+k], y=w*a[j+mid+k];a[j+k]=x+y; a[j+mid+k]=x-y;}}}
}inline int getint(int &x){char c; int flag=0;for (c=getchar(); !isdigit(c); c=getchar())if (c=='-') flag=1;for (x=c-48; c=getchar(), isdigit(c);)x=(x<<3)+(x<<1)+c-48;return flag?x:-x;
}int main(){getint(n); getint(m); int x;for (int i=0; i<=n; ++i) getint(x), A[i].x=x;for (int i=0; i<=m; ++i) getint(x), B[i].x=x;while (len<=n+m) len<<=1, ++l;  //idft需要至少l1+l2个点值for (int i=0; i<len; ++i)  //编号的字节长度为lr[i]=(r[i>>1]>>1)|((i&1)<<(l-1));fdft(A, len, 1); fdft(B, len, 1);for (int i=0; i<len; ++i) C[i]=A[i]*B[i];fdft(C, len, -1);  //idftfor (int i=0; i<=n+m; ++i) printf("%d ", int(C[i].x/len+0.5));return 0;
}

P3803 【模板】多项式乘法(FFT)相关推荐

  1. 多项式乘法 FFT模板

    题目传送门 在下只是来存个板子,,(板子还是洛谷找的2333) 证明的话,太(wo)难(bu)写(hui),就先留个坑吧,,, NOIP后,如果没退役,我会回来填坑的,, #include<bi ...

  2. 解题报告(二)多项式问题(多项式乘法及其各种运算)(ACM/ OI)超高质量题解

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  3. 洛谷 - P3803 【模板】多项式乘法(FFT/NTT)

    题目链接:点击查看 题目大意:给出两个多项式 F( x ) 和 G( x ) 的系数,求其卷积后的系数 题目分析:存一个FFT的模板,原理学不明白,数论和dp都扔给队友了,当个快乐的fw 代码: // ...

  4. 【luogu P3803】【模板】多项式乘法(NTT)

    [模板]多项式乘法(NTT) 题目链接:luogu P3803 题目大意 给你两个多项式,要你求它们的卷积. 思路 这次我们写 NTT 的做法. 它的优点就是它可以取模,而且不会有精度问题,而且会比 ...

  5. luogu P4725 多项式对数函数 (模板题、FFT、多项式求逆、求导和积分)

    luogu P4725 多项式对数函数 (模板题.FFT.多项式求逆.求导和积分) 手动博客搬家: 本文发表于20181125 13:25:03, 原地址https://blog.csdn.net/s ...

  6. P4245 【模板】任意模数多项式乘法

    P4245 [模板]任意模数多项式乘法 https://www.luogu.com.cn/blog/AzusaCat/solution-p4245 首先这类问题指的是对于一个非NTT模数,我们如何计算 ...

  7. P4245 【模板】任意模数多项式乘法(NTT)

    题意: P4245 [模板]任意模数多项式乘法 题解: NTT模板,记录一下 代码: #include <bits/stdc++.h>using namespace std;#define ...

  8. luogu P4512 多项式除法 (模板题、FFT、多项式求逆)

    luogu P4512 多项式除法 (模板题.FFT.多项式求逆) 手动博客搬家: 本文发表于20181206 14:42:53, 原地址https://blog.csdn.net/suncongbo ...

  9. luogu P4238 多项式求逆 (模板题、FFT)

    luogu P4238 多项式求逆 (模板题.FFT) 手动博客搬家: 本文发表于20181125 13:21:46, 原地址https://blog.csdn.net/suncongbo/artic ...

最新文章

  1. 算法---找到数组中第二大的数
  2. 【mysql】已经创建表后,修改某列的默认值
  3. sqlite 增删改查附代码
  4. 没有日志 mysql 5.6主从同步_mysql之 mysql 5.6不停机主从搭建(一主一从基于日志点复制)...
  5. Oracle之Union与Union all的区别
  6. 浏览器端的九种缓存机制介绍
  7. Vue打包并发布项目
  8. 倒计时插件(及自动循环倒计时)代码
  9. dp hp oracle 备份软件_HP DP备份软件设置-(38465)
  10. 初二数学作业能用计算机算吗,很多小学生在做数学作业的时候用计算器,这样对吗?...
  11. Hibernate第九篇【组件映射、继承映射】
  12. python0基础 第三节
  13. 写php程序出现乱码怎么办?
  14. matlab中的带弯的x怎么输入,数学中的X怎么打出来呀,是那种弯的
  15. 面渣逆袭:Spring三十五问,四万字+五十图详解,建议收藏。
  16. thinkphp6 加载第三方类库_ThinkPHP vendor 方法导入第三方类库
  17. python项目报告书_python项目
  18. 搬砖日记:关于sync用不了的问题
  19. 微服务精通之Eureka原理解析
  20. Revit学习笔记003-(Revit二次开发用的9个实践)

热门文章

  1. 程序员崩溃的40个瞬间!!!
  2. 掌握深度学习,为什么要用 PyTorch、TensorFlow 框架?
  3. ksweb如何安装php5.6_Android端的服务器容器 KSWEB PHP+MySQL环境搭建及应用
  4. android studio 创建.9文件,自己使用Android studio创建.9(点9)图片
  5. java+字节码工具64位_jclasslib 下载-jclasslib 32位64位(java字节码查看工具) 5.1 官方版 - 河东下载站...
  6. mysql 命令 g_MySQL命令行的几个用法
  7. shiro单点登录原理_SSO单点登录三种情况的实现方式详解
  8. python测试4_Python 各种测试框架简介(四):pytest
  9. linux脚本启三个tomcat,linux 重写Tomcat启停脚本
  10. python 里什么时候缩进_python什么时候缩进