洛谷 P3803 多项式乘法
题目背景
这是一道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 2
1 2
1 2 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 多项式乘法的更多相关文章
- [uoj#34] [洛谷P3803] 多项式乘法(FFT)
新技能--FFT. 可在 \(O(nlogn)\) 时间内完成多项式在系数表达与点值表达之间的转换. 其中最关键的一点便为单位复数根,有神奇的折半性质. 多项式乘法(即为卷积)的常见形式: \[ C_ ...
- 洛谷 P3803 多项式乘法(FFT) —— FFT
题目:https://www.luogu.org/problemnew/show/P3803 终于学了FFT了! 参考博客:https://www.cnblogs.com/zwfymqz/p/8244 ...
- FFT/NTT总结+洛谷P3803 【模板】多项式乘法(FFT)(FFT/NTT)
前言 众所周知,这两个东西都是用来算多项式乘法的. 对于这种常人思维难以理解的东西,就少些理解,多背板子吧! 因此只总结一下思路和代码,什么概念和推式子就靠巨佬们吧 推荐自为风月马前卒巨佬的概念和定理 ...
- 洛谷p3803 FFT入门
洛谷p3803 FFT入门 ps:花了我一天的时间弄懂fft的原理,感觉fft的折半很神奇! 大致谈一谈FFT的基本原理: 对于两个多项式的卷积,可以O(n^2)求出来(妥妥的暴力) 显然一个多项式可 ...
- 洛谷P1067 多项式输出 NOIP 2009 普及组 第一题
洛谷P1067 多项式输出 NOIP 2009 普及组 第一题 题目描述 一元n次多项式可用如下的表达式表示: 输入输出格式 输入格式 输入共有 2 行 第一行 1 个整数,n,表示一元多项式的次数. ...
- 洛谷P3803 【模板】多项式乘法(FFT)
P3803 [模板]多项式乘法(FFT) 题目背景 这是一道FFT模板题 题目描述 给定一个n次多项式F(x),和一个m次多项式G(x). 请求出F(x)和G(x)的卷积. 输入输出格式 输入格式: ...
- 洛谷 P3803 【模板】多项式乘法(FFT)
题目链接:P3803 [模板]多项式乘法(FFT) 题意 给定一个 \(n\) 次多项式 \(F(x)\) 和一个 \(m\) 次多项式 \(G(x)\),求 \(F(x)\) 和 \(G(x)\) ...
- 【总结】对FFT的理解 / 【洛谷 P3803】 【模板】多项式乘法(FFT)
题目链接 \(\Huge\text{无图,慎入}\) \(FFT\)即快速傅里叶变换,用于加速多项式乘法. 如果暴力做卷积的话就是一个多项式的每个单项式去乘另一个多项式然后加起来,时间复杂度为\(O( ...
- 洛谷P3803 【模板】多项式乘法 [NTT]
题目传送门 多项式乘法 题目描述 给定一个n次多项式F(x),和一个m次多项式G(x). 请求出F(x)和G(x)的卷积. 输入输出格式 输入格式: 第一行2个正整数n,m. 接下来一行n+1个数字, ...
随机推荐
- js生成图片
var image = new Image(); var c = document.getElementById("myCanvas"); var ctx = c.getConte ...
- 用JavaScript写一个类似PHP print_r的函数
PHP print_r的函数很好用,可以用来打印数组.对象等的结构与数据,可惜JavaScript并没有原生提供类似的函数.不过我们可以试着自己来实现这个函数,下面提供一些方法与思路. 方法一 fun ...
- 如何把阿里云的服务器配置为mac的共享文件夹(亲测有效)
写在开头的就是,我只能百分之九十确定这个是真的有效....毕竟试了太多的方法,最后莫名其妙的就好了.. - -# 基础的步骤就不说了,网上一搜一大把,大家可能follow了所有的步骤以后发现还是连接不 ...
- OWNER:Java配置文件解决方案 使用简介
这个感觉还是很方便的一个工具. 学习网站是:http://hao.jobbole.com/owner/ 测试步骤: 1.pom <dependency> <groupId>o ...
- 【BZOJ】1579: [Usaco2009 Feb]Revamping Trails 道路升级
[算法]分层图最短路 [题解] 考虑k层一模一样的图,然后每个夹层都在每条边的位置新加从上一层跨越到下一层的边权为0的边,这样至多选择k条边置为0. 然后考虑方便的写法. SPFA 第一次SPFA计算 ...
- 在Xcode5下实现4.5,4.6的效果
https://www.evernote.com/shard/s227/sh/a575caee-d6a8-4f43-9037-145b9a6913ca/c9a2befa22ce7c3f547f58 ...
- 密码框JPasswordField 的使用
JPasswordField的主要方法为setEchoChar(char c),其中的字符C为回显字符. package first; import javax.swing.*; import jav ...
- bootstrap-datetimepicker年视图中endDate设置之后比正常时间提前两个月
问题 bootstrap-datetimepicker年视图中endDate设置结束时间为2016-08,(即8月之后的日期不能选)而在日历上显示时为2016-06,相差两个月,即6月之后的日期不能选 ...
- Windows XP SP1 Privilege Escalation
MS05-018 MS05-018 Works for Windows 2K SP3/4 | Windows XP SP1/2 Download ms05-018.exe: https://githu ...
- laravel 获得各个根文件夹路径的方法及路由的一些使用
各个根文件夹路径的方法 APP目录: app_path(); config目录: config_path(); public目录: public_path(); storage目录: storage_ ...