UOJ#34 FFT模板题
2016-02-29 00:20
344 查看
写完上一道题才意识到自己没有在博客里丢过FFT的模板……
这道题就是裸的多项式乘法,可以FFT,可以NTT,也可以用Karasuba(好像有人这么写没有T),也可以各种其他分治乘法乱搞……
所以我就直接给板子了
这道题就是裸的多项式乘法,可以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模板题
- Android 系统稳定性 - OOM(二)
- Zip4j简单使用
- 导航栏制作
- python 动态类型
- recycleview详解
- 关于回调函数在Java中的运用(1)
- 转载】在 Mac OS X El Capitan 文件权限问题解决方法 (以安装 IPython 为例)
- android 获取手机中的短信信息
- 4-1-串的顺序存储结构-串-第4章-《数据结构》课本源码-严蔚敏吴伟民版
- iOS开发-UIActionSheet和UIAlertController
- 我的recycleview 总结
- BNUOJ 51279[组队活动 Large](cdq分治+FFT)
- java 命令对象简单学习实现:
- BNUOJ 51279[组队活动 Large](cdq分治+FFT)
- Android性能优化-泛谈 (一)
- Android异步下载图片并且缓存图片到本地
- Android抽象布局——include、merge 、ViewStub
- Cocos2dx工程总结
- 安卓开发环境搭建