loj #108. 多项式乘法
#108. 多项式乘法
题目描述
这是一道模板题。
输入两个多项式,输出这两个多项式的乘积。
输入格式
第一行两个整数 n nn 和 m mm,分别表示两个多项式的次数。
第二行 n+1 n + 1n+1 个整数,分别表示第一个多项式的 0 00 到 n nn 次项前的系数。
第三行 m+1 m + 1m+1 个整数,分别表示第二个多项式的 0 00 到 m mm 次项前的系数。
输出格式
一行 n+m+1 n + m + 1n+m+1 个整数,分别表示乘起来后的多项式的 0 00 到 n+m n + mn+m 次项前的系数。
样例
样例输入
1 2
1 2
1 2 1
样例输出
1 4 5 2
数据范围与提示
0≤n,m≤105 0 \leq n, m \leq 10 ^ 50≤n,m≤105,保证输入中的系数大于等于 0 00 且小于等于 9 99。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#define maxn 400010
#define PI (acos(-1.0))
using namespace std;
int rd[maxn];
struct node{
double x,y;
node(double a=,double b=):x(a),y(b){}
node operator + (const node &c)
{return node(x+c.x,y+c.y);}
node operator - (const node &c)
{return node(x-c.x,y-c.y);}
node operator * (const node &c)
{return node(x*c.x-y*c.y,x*c.y+y*c.x);}
node operator / (const double &c)
{return node(x/c,y/c);}
}a[maxn],b[maxn];
void fft(node *a,int n,int f){
node wn,w;int i;
for(int i=;i<=n;i++)
if(rd[i]>i)swap(a[i],a[rd[i]]);
for(int k=;k<n;k<<=){
wn=node(cos(PI/k),f*sin(PI/k));
for(int j=;j<n;j+=(k<<)){
for(w=node(,),i=;i<k;i++,w=w*wn){
node x=a[i+j];
node y=a[i+j+k]*w;
a[i+j]=x+y;
a[i+j+k]=x-y;
}
}
}
if(f==-)
for(int i=;i<=n;i++)a[i]=a[i]/n;
}
int main(){
int n,m;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)scanf("%lf",&a[i].x);
for(int i=;i<=m;i++)scanf("%lf",&b[i].x);
m=n+m,n=;int l=;
while(n<=m){n<<=,l++;}
for(int i=;i<=n;i++)rd[i]=(rd[i>>]>>)|((i&)<<(l-));
fft(a,n,);fft(b,n,);
for(int i=;i<=n;i++)a[i]=a[i]*b[i];
fft(a,n,-);
for(int i=;i<=m;i++)printf("%d ",(int)(a[i].x+0.5));
return ;
}
loj #108. 多项式乘法的更多相关文章
- LibreOJ #108. 多项式乘法
二次联通门 : LibreOJ #108. 多项式乘法 /* LibreOJ #108. 多项式乘法 FFT板子题 不行啊...跑的还是慢 应该找个机会学一学由乃dalao的fft 或者是毛爷爷的ff ...
- 洛谷.3803.[模板]多项式乘法(FFT)
题目链接:洛谷.LOJ. FFT相关:快速傅里叶变换(FFT)详解.FFT总结.从多项式乘法到快速傅里叶变换. 5.4 又看了一遍,这个也不错. 2019.3.7 叕看了一遍,推荐这个. #inclu ...
- [UOJ#34]多项式乘法
[UOJ#34]多项式乘法 试题描述 这是一道模板题. 给你两个多项式,请输出乘起来后的多项式. 输入 第一行两个整数 n 和 m,分别表示两个多项式的次数. 第二行 n+1 个整数,分别表示第一个多 ...
- [笔记]ACM笔记 - 利用FFT求卷积(求多项式乘法)
卷积 给定向量:, 向量和: 数量积(内积.点积): 卷积:,其中 例如: 卷积的最典型的应用就是多项式乘法(多项式乘法就是求卷积).以下就用多项式乘法来描述.举例卷积与DFT. 关于多项式 对于多项 ...
- FFT模板(多项式乘法)
FFT模板(多项式乘法) 标签: FFT 扯淡 一晚上都用来捣鼓这个东西了...... 这里贴一位神犇的博客,我认为讲的比较清楚了.(刚好适合我这种复数都没学的) http://blog.csdn.n ...
- 【Uoj34】多项式乘法(NTT,FFT)
[Uoj34]多项式乘法(NTT,FFT) 题面 uoj 题解 首先多项式乘法用\(FFT\)是一个很久很久以前就写过的东西 直接贴一下代码吧.. #include<iostream> # ...
- 【learning】多项式乘法&fft
[吐槽] 以前一直觉得这个东西十分高端完全不会qwq 但是向lyy.yxq.yww.dtz等dalao们学习之后发现这个东西的代码实现其实极其简洁 于是趁着还没有忘记赶紧来写一篇博 (说起来这篇东西的 ...
- 多项式乘法(FFT)学习笔记
------------------------------------------本文只探讨多项式乘法(FFT)在信息学中的应用如有错误或不明欢迎指出或提问,在此不胜感激 多项式 1.系数表示法 ...
- FFT/NTT总结+洛谷P3803 【模板】多项式乘法(FFT)(FFT/NTT)
前言 众所周知,这两个东西都是用来算多项式乘法的. 对于这种常人思维难以理解的东西,就少些理解,多背板子吧! 因此只总结一下思路和代码,什么概念和推式子就靠巨佬们吧 推荐自为风月马前卒巨佬的概念和定理 ...
随机推荐
- Java-API:java.util.regex.Pattern
ylbtech-Java-API:java.util.regex.Pattern 1.返回顶部 2.返回顶部 3.返回顶部 4.返回顶部 5.返回顶部 1. https://docs. ...
- MySQL mysqldump与innobackupex 组合备份
此脚本,在01点进行一次逻辑全备份,03点进行一次物理全备份,中午12点进行一次增量物理备份 #! /bin/bash #05 01,03,12 * * * mysql /data/mysqldata ...
- 第九课 go的循环语句
1 for语句的三种形式 /* for 循环 */ ; a < ; a++ { fmt.Printf("a 的值为: %d\n", a) } var a, b int = 1 ...
- spring学习七
一: web.xml中常用配置元素? <servlet></servlet>: 在向servlet或JSP页面制定初始化参数或定制URL时,首先命名servlet或JSP页面. ...
- 【译】Android 数据库 ORMLite
@DatabaseField cloumnName:指定字段名,不指定则变量名作为字段名 canBeNull:是否可以为null dataType:指定字段的类型 defaultValue:指定 ...
- Enumeration与Iterator的对比
Enumeration与Iterator的对比 Enumeration 接口 Iterator 接口 参数的含义 枚举类型 迭代器元素类型 所在包 java.util 父类 无 子类 StringTo ...
- adb device offline 解决办法
当电脑中的豌豆荚之类的应用打开的状态下 adb devices 显示连接状态 关闭手机助手之后,adb devices总显示 device offline 后来发现sdk platform-tool ...
- Android中同一个ImageView中根据状态显示不同图片
一般: if(条件1) { image.setBackground(R.id.xxx1); } else if (条件2) { image.setBackground(R.id.xxx2); } 实际 ...
- PHP数组函数的使用
1.array_walk($arr, $func, [$data]) 使用用户自定义的函数遍历所有的元素,返回true/false $func是一个函数名 默认会传入两个参数 第一个 $arr的值, ...
- 关于c#数据类型,类型转换,变量,常量,转义符。。。
先说一下数据类型...数据类型可以分为两大类:基本数据类型和引用类型. 基本数据类型按功能又分为“值类型”,“布尔型”,“字符型”. 引用类型分为“字符串”,“时间日期”. 没图没真相↓面放图. 橙 ...