题目背景

这是一道FFT模板题

题目描述

给定一个n次多项式F(x),和一个m次多项式G(x)。

请求出F(x)和G(x)的卷积。

输入输出格式

输入格式:

第一行2个正整数n,m。

接下来一行n+1个数字,从低到高表示F(x)的系数。

接下来一行m+1个数字,从低到高表示G(x))的系数。

输出格式:

一行n+m+1个数字,从低到高表示F(x)∗G(x)的系数。

输入输出样例

输入样例#1:

1 2
1 2
1 2 1
输出样例#1:

1 4 5 2

说明

保证输入中的系数大于等于 0 且小于等于9。

对于100%的数据: n, m \leq {10}^6n,m≤106, 共计20个数据点,2s。

数据有一定梯度。

空间限制:256MB

NTT和FFT有惊人的类似度hhh,总的说就是把单位根换成了原根。

最好是取一个形如p=k*2^x+1这样的质数p,这里x最好大一点。

然后在FFT里1的K次单位根是(cos(2*π/K),sin(2*π/K))  (一个复数),而NTT里则是 g^((p-1)/K)。

dft的逆函数的话也类似,就是把g换成g^-1。

#include<bits/stdc++.h>
#define ll long long
#define maxn 3000005
#define ha 998244353
using namespace std;
const int ba=;
const int ni=ha/ba+; inline int add(int x,int y){
x+=y;
if(x>=ha) x-=ha;
return x;
} inline int dec(int x,int y){
x-=y;
if(x<) x+=ha;
return x;
} inline int ksm(int x,int y){
int an=;
for(;y;y>>=,x=(ll)x*x%ha) if(y&) an=(ll)an*x%ha;
return an;
} int n,m,a[maxn],b[maxn];
int r[maxn],l,inv; inline void fft(int *c,int f){
for(int i=;i<n;i++) if(i<r[i]) swap(c[i],c[r[i]]); for(int i=;i<n;i<<=){
int omega=(f==?ksm(ba,(ha-)/(i<<)):ksm(ni,(ha-)/(i<<)));
for(int j=,p=i<<;j<n;j+=p){
int now=;
for(int k=;k<i;k++,now=(ll)now*omega%ha){
int x=c[j+k],y=(ll)now*c[j+k+i]%ha;
c[j+k]=add(x,y);
c[j+k+i]=dec(x,y);
}
}
} if(f==-) for(int i=;i<n;i++) c[i]=(ll)c[i]*inv%ha;
} int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",a+i);
for(int i=;i<=m;i++) scanf("%d",b+i); m+=n;
for(n=,l=;n<=m;n<<=) l++;
for(int i=;i<n;i++) r[i]=(r[i>>]>>)|((i&)<<(l-));
inv=ksm(n,ha-); fft(a,),fft(b,);
for(int i=;i<n;i++) a[i]=(ll)a[i]*b[i]%ha;
fft(a,-);
for(int i=;i<=m;i++) printf("%d ",a[i]);
puts("");
return ;
}

洛谷 P3803 多项式乘法的更多相关文章

  1. [uoj#34] [洛谷P3803] 多项式乘法(FFT)

    新技能--FFT. 可在 \(O(nlogn)\) 时间内完成多项式在系数表达与点值表达之间的转换. 其中最关键的一点便为单位复数根,有神奇的折半性质. 多项式乘法(即为卷积)的常见形式: \[ C_ ...

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

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

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

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

  4. 洛谷p3803 FFT入门

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

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

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

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

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

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

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

  8. 【总结】对FFT的理解 / 【洛谷 P3803】 【模板】多项式乘法(FFT)

    题目链接 \(\Huge\text{无图,慎入}\) \(FFT\)即快速傅里叶变换,用于加速多项式乘法. 如果暴力做卷积的话就是一个多项式的每个单项式去乘另一个多项式然后加起来,时间复杂度为\(O( ...

  9. 洛谷P3803 【模板】多项式乘法 [NTT]

    题目传送门 多项式乘法 题目描述 给定一个n次多项式F(x),和一个m次多项式G(x). 请求出F(x)和G(x)的卷积. 输入输出格式 输入格式: 第一行2个正整数n,m. 接下来一行n+1个数字, ...

随机推荐

  1. Super Moban

    HAO BAN ZI 包括求解,判断无解,求自由变元个数以及标记不确定的变元.来源:http://blog.csdn.net/keshuqi/article/details/51921615 #inc ...

  2. How do I see what character set a database / table / column is in MySQL?

    Q: How do I see what the character set that a MySQL database, table and column are in? Is there some ...

  3. There is an overlap in the region chain

    ERROR: (regions day_hotstatic,860010-2355010000_20140417_12_entry_00000000321,1398674475358.0dc20573 ...

  4. VS2010 VC Project的default Include设置

    在IDE中,打开View->Other Windows->Property Manager.展开树形后,你会发现一个名为“Microsoft.Cpp.Win32.user”的项目(如下图) ...

  5. Spring MVC框架下 从后台读取数据库并显示在前台页面【笔记自用 不推荐作为参考】

    1.书写jsp页面  people.jsp 1.设计显示格式以及内容显示 2.设计显示内容的范围 2.书写entity实体类 PeopleFormMap.java 书写传入的参数主要包括 要引用的数据 ...

  6. [bzoj3876][AHOI2014]支线剧情——上下界费用流

    题目 传送门 题解 建立s和t,然后s向1连下限0上限inf费用0的边,除1外所有节点向t连下限0上限inf费用0的边,对于每条边下限为1上限为inf费用为经过费用,然后我们只有做上下界网络流构出新图 ...

  7. bzoj 1293 贪心

    首先我们可以将这道题看成一个数轴,数轴其中的某些点存在一些颜色,我们要选取最短的一段,使这段存 在所有颜色,那么我们使用指针i,j表示在j-i位置中包含的颜色,那么初值是0,0,我们先i++,同时添加 ...

  8. hdu 1175 连连看 (深搜)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1175 题目大意:如果某两个相同的棋子,可以通过一条线连起来(这条线不能经过其它棋子)这样的两个棋子可以 ...

  9. Python学习笔记 - day7 - 类

    类 面向对象最重要的概念就是类(Class)和实例(Instance),比如球类,而实例是根据类创建出来的一个个具体的“对象”,每个对象都拥有相同的方法,但各自的数据可能不同.在Python中,定义类 ...

  10. MySQL MyISAM优化设置点滴

    先说一点问题:   Mysql中的InnoDB和MyISAM是在使用MySQL中最常用的两个表类型,各有优缺点.两种类型最主要的差别就是 InnoDB 支持事务处理与外键和行级锁.而MyISAM不支持 ...