二次联通门 : LibreOJ #108. 多项式乘法

/*
LibreOJ #108. 多项式乘法 FFT板子题
不行啊。。。跑的还是慢 应该找个机会学一学由乃dalao的fft
或者是毛爷爷的fft,跑的真是快啊。。。
*/
#include <cstdio>
#include <iostream>
#include <cmath> const int BUF = ;
char Buf[BUF], *buf = Buf; inline void read (int &now)
{
for (now = ; !isdigit (*buf); ++ buf);
for (; isdigit (*buf); now = now * + *buf - '', ++ buf);
}
using std :: swap;
#define Max 3000000
typedef double flo;
struct Vec
{
flo r, i; Vec () {}
Vec (flo x, flo y) : r (x), i (y) {}
Vec operator * (const Vec &b) const
{ return Vec (r * b.r - i * b.i, r * b.i + i * b.r); }
Vec operator * (const flo &k) const
{ return Vec (r * k, i * k); }
Vec operator + (const Vec &b) const
{ return Vec (r + b.r, i + b.i); }
Vec operator - (const Vec &b) const
{ return Vec (r - b.r, i - b.i); }
Vec& operator /= (const flo &k)
{ return r /= k, i /= k, *this; }
}; Vec a[Max], b[Max];
int N, M, Maxn, rader[Max];
const flo PI = acos (-); void FFT (Vec *a, int N, int f = )
{
register int i, j, k;
for (i = ; i < N; ++ i)
if (rader[i] > i) swap (a[i], a[rader[i]]);
for (k = ; k < N; k <<= )
{
Vec wn (cos (PI / k), f * sin (PI / k));
for (j = ; j < N; j += k << )
{
Vec w (, ), t;
for (i = j; i < j + k; ++ i, w = w * wn)
{
t = w * a[i + k];
a[i + k] = a[i] - t;
a[i] = a[i] + t;
}
}
}
if (f == -)
for (i = ; i < N; ++ i) a[i] /= N;
} int Main ()
{
fread (buf, , BUF, stdin);
read (N), read (M); register int i; int x;
++ N, ++ M, Maxn = << int (ceil (log2 (N + M)));
for (i = ; i < N; ++ i) read (x), a[i].r = x;
for (i = ; i < M; ++ i) read (x), b[i].r = x; for (i = ; i < Maxn; ++ i)
rader[i] = rader[i >> ] >> | (i & ) * (Maxn >> );
FFT (a, Maxn), FFT (b, Maxn);
for (i = ; i < Maxn; ++ i)
a[i] = a[i] * b[i];
N = N + M - ;
for (FFT (a, Maxn, -), i = ; i <= N; ++ i)
printf ("%d ", int (round (a[i].r)));
return ;
}
int ZlycerQan = Main ();
int main (int argc, char *argv[]) {;}

LibreOJ #108. 多项式乘法的更多相关文章

  1. loj #108. 多项式乘法

    #108. 多项式乘法   题目描述 这是一道模板题. 输入两个多项式,输出这两个多项式的乘积. 输入格式 第一行两个整数 n nn 和 m mm,分别表示两个多项式的次数. 第二行 n+1 n + ...

  2. [UOJ#34]多项式乘法

    [UOJ#34]多项式乘法 试题描述 这是一道模板题. 给你两个多项式,请输出乘起来后的多项式. 输入 第一行两个整数 n 和 m,分别表示两个多项式的次数. 第二行 n+1 个整数,分别表示第一个多 ...

  3. [笔记]ACM笔记 - 利用FFT求卷积(求多项式乘法)

    卷积 给定向量:, 向量和: 数量积(内积.点积): 卷积:,其中 例如: 卷积的最典型的应用就是多项式乘法(多项式乘法就是求卷积).以下就用多项式乘法来描述.举例卷积与DFT. 关于多项式 对于多项 ...

  4. FFT模板(多项式乘法)

    FFT模板(多项式乘法) 标签: FFT 扯淡 一晚上都用来捣鼓这个东西了...... 这里贴一位神犇的博客,我认为讲的比较清楚了.(刚好适合我这种复数都没学的) http://blog.csdn.n ...

  5. 【Uoj34】多项式乘法(NTT,FFT)

    [Uoj34]多项式乘法(NTT,FFT) 题面 uoj 题解 首先多项式乘法用\(FFT\)是一个很久很久以前就写过的东西 直接贴一下代码吧.. #include<iostream> # ...

  6. 【learning】多项式乘法&fft

    [吐槽] 以前一直觉得这个东西十分高端完全不会qwq 但是向lyy.yxq.yww.dtz等dalao们学习之后发现这个东西的代码实现其实极其简洁 于是趁着还没有忘记赶紧来写一篇博 (说起来这篇东西的 ...

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

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

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

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

  9. 求幂运算、多项式乘法及Horner法则的应用

    一,两种不同的求幂运算 求解x^n(x 的 n 次方) ①使用递归,代码如下: private static long pow(int x, int n){ if(n == 0) return 1; ...

随机推荐

  1. JAVA的枚举基本操作,对原码反码补码的理解及为运算的深入理解,浮点数计算的误差分析

    ①深入浅出的了解枚举类型 先看一段代码: enum Size{SMALL,MEDIUM,LARGE}; public class EnumTest { public static void main( ...

  2. postman调用webapi错误记录

    1.webapi ,接口中header中,value 不能太长,太长会报错 结局:value中不要存太长的数据 2.如果key 中有中文,会获取不到数据 , 解决:需要把中文转码,然后后端解码 3.如 ...

  3. java之struts2之异常处理

    1.在应用项目中,异常的出现时很正常的.而且项目上线后发生异常也很正常的.那么需要对这些异常有相应的处理机制,以便客户能够看你到更加友好的界面.Struts2中提供了异常处理机制. 2.Struts中 ...

  4. web API .net - .net core 对比学习-使用Swagger

    根据前两篇的介绍,我们知道.net web api 和 .net core web api在配置方面的不同如下: 1. .net web api的配置是在 App_Stat文件夹里面添加对应的配置类, ...

  5. 父元素设置min-height子元素设置100%问题

    问题:父元素设置min-height子元素高度设置100%取不到值,这是因为子元素 div设置 height:100%: 只有当父级元素满足min-height:1000px;设置的条件才触发: 浏览 ...

  6. pycharm从本地离线添加模块

    豆瓣的源: http://pypi.douban.com/simple pip install matplotlib -i http://pypi.douban.com/simple --truste ...

  7. group by 和 order by 的区别 + 理解过程

    order by 和 group by 的区别order by 和 group by 的区别:1,order by 从英文里理解就是行的排序方式,默认的为升序. order by 后面必须列出排序的字 ...

  8. SYBASE扩充日志段空间

    有时候日志段空间满了使用下列语句也无济于事,又不能直接重启库,就加空间应急,dump tran QAS with truncate_only dump tran QAS with no_log sp_ ...

  9. UGUI image

    1.创建UI->image 如何将图片在导入到场景中:将图片资源导入unity后,找到要导入的图片,将Texture Type改为“Sprite(2D and UI)”精灵模式,然后点击Appl ...

  10. oracle in和exists区别

    in和exists http://oraclemine.com/sql-exists-vs-in/ https://www.techonthenet.com/oracle/exists.php htt ...