LibreOJ #108. 多项式乘法
二次联通门 : 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. 多项式乘法的更多相关文章
- loj #108. 多项式乘法
#108. 多项式乘法 题目描述 这是一道模板题. 输入两个多项式,输出这两个多项式的乘积. 输入格式 第一行两个整数 n nn 和 m mm,分别表示两个多项式的次数. 第二行 n+1 n + ...
- [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)
前言 众所周知,这两个东西都是用来算多项式乘法的. 对于这种常人思维难以理解的东西,就少些理解,多背板子吧! 因此只总结一下思路和代码,什么概念和推式子就靠巨佬们吧 推荐自为风月马前卒巨佬的概念和定理 ...
- 求幂运算、多项式乘法及Horner法则的应用
一,两种不同的求幂运算 求解x^n(x 的 n 次方) ①使用递归,代码如下: private static long pow(int x, int n){ if(n == 0) return 1; ...
随机推荐
- UOJ46 清华集训2014玄学(线段树)
注意到操作有结合律,容易想到用一个矩形表示第i次操作对第j个位置的数的影响.那么修改是单行内的区间修改,而查询是单列内的区间查询.这样二维线段树上以列为外层行为内层直接打标记就可以维护.然后就喜闻乐见 ...
- Springboot token令牌验证解决方案 在SpringBoot实现基于Token的用户身份验证
1.首先了解一下Token 1.token也称作令牌,由uid+time+sign[+固定参数]组成: uid: 用户唯一身份标识 time: 当前时间的时间戳 sign: 签名, 使用 hash/e ...
- string.join用法
C# String.Join用法 String.Join(String, String[]) 在指定 String 数组的每个元素之间串联指定的分隔符 String,从而产生单个串联的字符串 例如: ...
- MVC-08模型
部分7:添加数据模型. MVC模型 MVC模型包含所有应用程序逻辑(业务逻辑.验证逻辑.数据访问逻辑),除了纯视图和控制器逻辑. 通过MVC,模型可保存并操作应用程序数据. Models文件夹 Mod ...
- IOS - UDID IDFA IDFV MAC keychain
在开发过程中,我们经常会被要求获取每个设备的唯一标示,以便后台做相应的处理.我们来看看有哪些方法来获取设备的唯一标示,然后再分析下这些方法的利弊. 具体可以分为如下几种: UDID IDFA IDFV ...
- 二叉排序树详解——PHP代码实现
二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树. 一.定义 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: 若左子树不空 ...
- Ubuntu安装usb库
sudo pip install pyserial sudo pip install pyusb
- vue-cli脚手架——3.0版本项目案例
一.[准备工作] node与git部分见vue-cli2.0搭建案例 vue-cli3.0是一个基于 Vue.js 进行快速开发的完整系统.有三个组件: CLI:@vue/cli 全局安装的 npm ...
- Entity framework 生成的SQL如何设置兼容低版本的数据(转载)
来源:https://q.cnblogs.com/q/84401/ 右键 edmx 文件,有xml方式打开. 将ProviderManifestToken 改为 2008 .
- MySQL Backup--Xtrabackup备份异常(MySQL Server has gone away)
错误场景MySQL 版本:5.7.24XtraBackup 版本:2.4.8CentOS 版本:6.5 MySQL需要新增一个从库,为避免XtraBackup备份影响生产,选择在从库上进行备份,备份脚 ...