bzoj 2194
来源:互联网 发布:网络跟踪 编辑:程序博客网 时间:2024/05/22 03:02
FFT;把b数组倒过来就好看了
#include<bits/stdc++.h>#define rep(i,k,n) for(int i=k;i<(n);i++)using namespace std;typedef double db;const int maxn = (1 << 20) + 5;const db pi = acos(-1.0);struct virt { db r, i; virt(db r = 0.0, db i = 0.0): r(r), i(i) {}};virt operator+(virt a, virt b) { return virt(a.r + b.r, a.i + b.i);}virt operator-(virt a, virt b) { return virt(a.r - b.r, a.i - b.i);}virt operator*(virt a, virt b) { return virt(a.r * b.r - a.i * b.i, a.i * b.r + a.r * b.i);}virt a[maxn], b[maxn];int n, m, L = 0, rev[maxn], cn;void fft(virt* x, int op) { rep(i, 1, n)if(rev[i] > i)swap(x[rev[i]], x[i]); for(int h = 2; h <= n; h <<= 1) { virt wn = virt(cos(op * 2 * pi / h), sin(op * 2 * pi / h)); for(int j = 0; j < n; j += h) { virt w = virt(1.0, 0.0); for(int k = j; k < j + h / 2; k++) { virt p = x[k]; virt q = w * x[k + h / 2]; x[k] = p + q; x[k + h / 2] = p - q; w = w * wn; } } } if(op == -1)rep(i, 0, n)x[i].r /= n; }int main() { //freopen("in.in", "r", stdin); scanf("%d", &n); cn = n; rep(i, 0, n) { scanf("%lf%lf", &a[i].r, &b[n - i - 1].r); a[i].i = b[n - 1 - i].i = 0.0; } m = n << 1; for(n = 1; n <= m; n <<= 1)L++; rep(i, 0, n)rev[i] = (rev[i >> 1] >> 1) | ((i & 1) << (L - 1)); fft(a, 1); fft(b, 1); rep(i, 0, n + 1)a[i] = a[i] * b[i]; fft(a, -1); rep(i, cn - 1, 2 * cn - 1)printf("%d\n", (int)(a[i].r + 0.1)); return 0;}
0 0
- bzoj 2194
- BZOJ 2194 FFT
- bzoj 2194 [快速傅里叶变换]
- [BZOJ ]
- BZOJ****-****
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- bzoj
- bzoj
- BZOJ
- 番茄时间管理法(Pomodoro Technique):一个番茄是如何让你工作更有效率的
- 如何修改App名称
- Initramfs制作
- 出现次数最多的数
- java.util.Date()插入MySQL数据库datetime字段出错的解决办法
- bzoj 2194
- [Paper Reading] Bitcoin
- 新建maven库时,提示Could not resolve archetype org.apache.maven.archetypes:maven-archetype-quickstart:RELEA
- Android学习之设计模式之单例模式
- 打印特定星图案
- 使用sqlalchemy执行sql语句的方法
- elgg好文章地址
- hadoop入门教程-程序小实例
- 循环语句中continue和break充当“goto”角色