写完上一道题才意识到自己没有在博客里丢过FFT的模板……

这道题就是裸的多项式乘法,可以FFT,可以NTT,也可以用Karasuba(好像有人这么写没有T),也可以各种其他分治乘法乱搞……

所以我就直接给板子了

#include <cstdio>
#include <cmath>
#define MAXN 300005
#define DB double
#define pi 3.14159265358
struct cp {
DB x, y;
cp(){} cp(DB a, DB b):x(a), y(b){}
cp operator + (const cp &r) const { return cp(x+r.x, y+r.y); }
cp operator - (const cp &r) const { return cp(x-r.x, y-r.y); }
cp operator * (const cp &r) const { return cp(x*r.x - y*r.y, x*r.y+y*r.x); }
} a[MAXN], b[MAXN], tmp;
inline void Swap(cp &a, cp &b) { tmp=a; a=b; b=tmp; }
int n, m;
inline void fft(cp *a, int f) {
for(int i = 0, j = 0; i < n; ++ i) {
if(i > j) Swap(a[i], a[j]);
for(int l = (n>>1); (j^=l) < l; l >>= 1);
}
for(int i = 1; i < n; i <<= 1) {
cp wn(cos(pi/i), f*sin(pi/i));
for(int j = 0; j < n; j += i<<1) {
cp w(1, 0);
for(int k = 0; k < i; ++ k, w = w * wn) {
cp x = a[j + k], y = w * a[j + k + i];
a[j + k] = x + y;
a[j + k + i] = x - y;
}
}
}
if(-1 == f) for(int i = 0; i < n; ++ i) a[i].x /= n;
}
int main() {
scanf("%d%d", &n, &m);
for(int i = 0; i <= n; ++ i) scanf("%lf", &a[i].x);
for(int i = 0; i <= m; ++ i) scanf("%lf", &b[i].x);
for(m = n+m, n = 1; n <= m; n <<= 1);
fft(a, 1); fft(b, 1);
for(int i = 0; i <= n; ++ i) a[i] = a[i] * b[i];
fft(a, -1);
for(int i = 0; i <= m; ++ i) printf("%d ", (int)(a[i].x+0.1));
}

UOJ#34 FFT模板题的更多相关文章

  1. HDU 1402 A * B Problem Plus (FFT模板题)

    FFT模板题,求A*B. 用次FFT模板需要注意的是,N应为2的幂次,不然二进制平摊反转置换会出现死循环. 取出结果值时注意精度,要加上eps才能A. #include <cstdio> ...

  2. 51nod 1028 大数乘法 V2 【FFT模板题】

    题目链接 模板题.. #include<bits/stdc++.h> using namespace std; typedef int LL; typedef double db; nam ...

  3. UOJ 34: 多项式乘法(FFT模板题)

    关于FFT 这个博客的讲解超级棒 http://blog.miskcoo.com/2015/04/polynomial-multiplication-and-fast-fourier-transfor ...

  4. HDU 1402 fft 模板题

    题目就是求一个大数的乘法 这里数字的位数有50000的长度,按平时的乘法方式计算,每一位相乘是要n^2的复杂度的,这肯定不行 我们可以将每一位分解后作为系数,如153 = 1*x^2 + 5*x^1 ...

  5. [hdu1402]A * B Problem Plus(FFT模板题)

    解题关键:快速傅里叶变换fft练习. 关于结果多项式长度的确定,首先将短多项式扩展为长多项式,然后扩展为两倍. #include<cstdio> #include<cstring&g ...

  6. [UOJ#35] [UOJ后缀数组模板题] 后缀排序 [后缀数组模板]

    后缀数组,解决字符串问题的有利工具,本题代码为倍增SA算法 具体解释详见2009年国家集训队论文 #include <iostream> #include <algorithm> ...

  7. UOJ 34 多项式乘法 FFT 模板

    这是一道模板题. 给你两个多项式,请输出乘起来后的多项式. 输入格式 第一行两个整数 nn 和 mm,分别表示两个多项式的次数. 第二行 n+1n+1 个整数,表示第一个多项式的 00 到 nn 次项 ...

  8. UOJ #146. 【NOIP2015】信息传递 连通分量 tarjan模板题

    http://uoj.ac/problem/146 题解:强连通分量 tarjan模板题.同时试了一下codeblock #include<bits/stdc++.h> using nam ...

  9. 【刷题】UOJ #34 多项式乘法

    这是一道模板题. 给你两个多项式,请输出乘起来后的多项式. 输入格式 第一行两个整数 \(n\) 和 \(m\) ,分别表示两个多项式的次数. 第二行 \(n+1\) 个整数,表示第一个多项式的 \( ...

随机推荐

  1. Android Dex文件格式(一)

    dex是Android平台上(Dalvik虚拟机)的可执行文件, 相当于Windows平台中的exe文件, 每个Apk安装包中都有dex文件, 里面包含了该app的所有源码, 通过反编译工具可以获取到 ...

  2. Linux上的常用软件

    zsh (fish): a new shell oh my zsh: zsh's conf file apvlv: pdf viewer(vim style) autojump: quick 'cd'

  3. Activity启动模式

    ------siwuxie095 共4种启动模式:standard singleTop singleTask singleInstance 1.标准启动模式(standard) 也即默认的启动模式 ( ...

  4. sqlalchemy 大全

    SQLAchemy SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行S ...

  5. FMDB中 databaseWithPath 的使用问题

    阅读fmdb的源码文件(下载地址http://github.com/ccgus/fmdb)会发现下面一段注释,里面提到的创建数据库的方法也在很多博客中被引用,但是跑代码的时候发现,文件并不会像文档中所 ...

  6. DFTX 笔试

    char aa[8] = "abcd"; printf("%d",strlen(aa));  4 printf("%d",sizeof(aa ...

  7. sql server数据库操作

    --插入整行数据 , '1983-08-29', 'A', 'A', 'A') --插入部分列数据 , '1983-08-29') --删除行记录 delete from person where n ...

  8. Oracle 表空间

    表空间 编辑 本词条缺少信息栏,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 表空间是数据库的逻辑划分,一个表空间只能属于一个数据库.所有的数据库对象都存放在指定的表空间中.但主要存放的是表 ...

  9. OA及权限系统

    一直想找一款适合自己的权限管理后台,始终都没找到合适的,决定自己写一个 开发环境:vs2012 ,sql2008 语言:C# 前端:ligurui,jquery ORM框架:EF6.0 先来晒下我的数 ...

  10. JAVA网络编程

    网络技术基础  OSI模型 应用层-表示层-会话层-传输层-网络层-数据链路层-物理层  TCP/IP分层模型 应用层-传输层-网络互联层-网络接口层Socket(套接字) TCP套接字编程 Serv ...