新技能——FFT。

可在 \(O(nlogn)\) 时间内完成多项式在系数表达与点值表达之间的转换。

其中最关键的一点便为单位复数根,有神奇的折半性质。

多项式乘法(即为卷积)的常见形式:

\[C_n=\sum\limits_{i=0}^n A_iB_{n-i}
\]

基本思路为先将系数表达 -> 点值表达 \(O(nlogn)\)

随后点值 \(O(n)\) 进行乘法运算

最后将点值表达 -> 系数表达 \(O(nlogn)\)


代码##

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath> using namespace std; const int N = 2100005;
const double pi = 3.1415926535897932384626433832795; struct c{
double r,i;
c() { r=i=0.0; }
c(double x,double y) { r=x; i=y; }
c operator + (const c &b) { return c(r+b.r,i+b.i); }
c operator += (const c &b) { return *this=*this+b; }
c operator - (const c &b) { return c(r-b.r,i-b.i); }
c operator -= (const c &b) { return *this=*this-b; }
c operator * (const c &b) { return c(r*b.r-i*b.i,r*b.i+b.r*i); }
c operator *= (const c &b) { return *this=*this*b; }
}a[N],b[N],x[N]; int l;
int r[N];
void fft(c A[],int ty){
for(int i=0;i<l;i++) x[r[i]]=A[i];
for(int i=0;i<l;i++) A[i]=x[i];
for(int i=2;i<=l;i<<=1){
c wn(cos(pi*2/i),ty*sin(pi*2/i));
for(int j=0;j<l;j+=i){
c w(1,0);
for(int k=j;k<j+i/2;k++){
c t=A[k+i/2]*w;
A[k+i/2]=A[k]-t;
A[k]+=t;
w*=wn;
}
}
}
} int n,m; int main()
{
scanf("%d%d",&n,&m);
for(int i=0;i<=n;i++) scanf("%lf",&a[i].r);
for(int i=0;i<=m;i++) scanf("%lf",&b[i].r); l=1;
while(l<=n+m) l<<=1;
for(int i=0;i<l;i++) r[i]=(r[i>>1]>>1)|((i&1)*(l>>1)); fft(a,1);fft(b,1);
for(int i=0;i<l;i++)
a[i]*=b[i];
fft(a,-1); for(int i=0;i<n+m;i++)
printf("%d ",int(a[i].r/l+0.5));
printf("%d",int(a[n+m].r/l+0.5)); return 0;
}

[uoj#34] [洛谷P3803] 多项式乘法(FFT)的更多相关文章

  1. 洛谷 P3803 多项式乘法(FFT) —— FFT

    题目:https://www.luogu.org/problemnew/show/P3803 终于学了FFT了! 参考博客:https://www.cnblogs.com/zwfymqz/p/8244 ...

  2. 洛谷 P3803 多项式乘法

    题目背景 这是一道FFT模板题 题目描述 给定一个n次多项式F(x),和一个m次多项式G(x). 请求出F(x)和G(x)的卷积. 输入输出格式 输入格式: 第一行2个正整数n,m. 接下来一行n+1 ...

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

    前言 众所周知,这两个东西都是用来算多项式乘法的. 对于这种常人思维难以理解的东西,就少些理解,多背板子吧! 因此只总结一下思路和代码,什么概念和推式子就靠巨佬们吧 推荐自为风月马前卒巨佬的概念和定理 ...

  4. 洛谷p3803 FFT入门

    洛谷p3803 FFT入门 ps:花了我一天的时间弄懂fft的原理,感觉fft的折半很神奇! 大致谈一谈FFT的基本原理: 对于两个多项式的卷积,可以O(n^2)求出来(妥妥的暴力) 显然一个多项式可 ...

  5. 多项式乘法(FFT)学习笔记

    ------------------------------------------本文只探讨多项式乘法(FFT)在信息学中的应用如有错误或不明欢迎指出或提问,在此不胜感激 多项式 1.系数表示法  ...

  6. uoj#348/洛谷P4221 [WC2018]州区划分(FWT)

    传送门(uoj) 传送门(洛谷) 全世界都会子集卷积就咱不会--全世界都在写\(FMT\)就咱只会\(FWT\)-- 前置芝士 或运算\(FWT\)或者\(FMT\) 左转洛谷模板区,包教包会 子集卷 ...

  7. 洛谷P1067 多项式输出 NOIP 2009 普及组 第一题

    洛谷P1067 多项式输出 NOIP 2009 普及组 第一题 题目描述 一元n次多项式可用如下的表达式表示: 输入输出格式 输入格式 输入共有 2 行 第一行 1 个整数,n,表示一元多项式的次数. ...

  8. 洛谷P3803 【模板】多项式乘法(FFT)

    P3803 [模板]多项式乘法(FFT) 题目背景 这是一道FFT模板题 题目描述 给定一个n次多项式F(x),和一个m次多项式G(x). 请求出F(x)和G(x)的卷积. 输入输出格式 输入格式: ...

  9. 洛谷 P3803 【模板】多项式乘法(FFT)

    题目链接:P3803 [模板]多项式乘法(FFT) 题意 给定一个 \(n\) 次多项式 \(F(x)\) 和一个 \(m\) 次多项式 \(G(x)\),求 \(F(x)\) 和 \(G(x)\) ...

随机推荐

  1. 2019-5-21-win10-uwp-商业游戏-1.1.5

    title author date CreateTime categories win10 uwp 商业游戏 1.1.5 lindexi 2019-05-21 11:38:20 +0800 2018- ...

  2. margin为负值的几种情况

    1.margin-top为负值像素 margin-top为负值像素,偏移值相对于自身,其后元素受影响,见如下代码: 1 <!DOCTYPE html> 2 <html lang=&q ...

  3. background:url(./images.png) no-repeat 0 center的用法

    background:url(./images.png) no-repeat 0 center; //图像地址 不重复 水平位置0 垂直位置居中 background:url(./images.png ...

  4. 2018-8-10-win10-uwp-进度条-WaveProgressControl

    title author date CreateTime categories win10 uwp 进度条 WaveProgressControl lindexi 2018-08-10 19:16:5 ...

  5. Linux 内核提交 urb

    一旦 urb 被正确地创建,并且被 USB 驱动初始化, 它已准备好被提交给 USB 核心来发送 出到 USB 设备. 这通过调用函数 usb_submit_urb 实现: int usb_submi ...

  6. HDU - 4289 Control (Dinic)

    You, the head of Department of Security, recently received a top-secret information that a group of ...

  7. How to fix nuget Unrecognized license type MIT when pack

    When I packaging license within the nupkg, I will using License to replace licentUrl. I using this c ...

  8. vue 数据监听原理

    Vue.prototype.listenDatas = function(){ for(var attr in this.$data){ this.listenData(this,attr,this. ...

  9. 使用FluentEmail发送outlook邮件

    一,邮箱账号相关设置 1,创建outLook邮箱. 2,进入邮箱设置->同步电子邮件->允许设备和应用使用pop 3,设置microsoft账号的应用程序密码->进入安全性页面-&g ...

  10. asp.net core web api 发布到iis失败 错误500.19

    找了很久,发现是没有装DotNetCore.2.0.0-WindowsHosting.exe的原因. 还是官方文档最给力.部署时遇到问题的朋友可以参考官方文档 https://docs.microso ...