炸掉的fft,改天再调
#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm> #define cal(...)(Vec){__VA_ARGS__}
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);
}
#define Max 150000 const double PI = acos (-.);
struct Vec
{
double x, y;
}; inline Vec operator + (Vec A, Vec B)
{
return cal (A.x + B.x, A.y + B.y);
}
inline Vec operator - (Vec A, Vec B)
{
return cal (A.x - B.x, A.y - B.y);
}
inline Vec operator * (Vec A, Vec B)
{
return cal (A.x * B.x - A.y * B.y, A.x * B.y + A.y * B.x);
}
inline Vec conj (Vec now)
{
return cal (now.x, -now.y);
} Vec *Get_w (int N)
{
static Vec w[Max / ];
w[].x = ;
w[] = cal (cos( * PI / N), sin ( * PI / N));
for (int i = ; i < N / ; ++ i)
w[i] = w[i - ] * w[];
return w;
} void FFT (Vec *a, int N)
{
register int i, j, k;
for (i = , j = ; i < N; ++ i)
{
if (i < j)
std :: swap (a[i], a[j]);
for (k = N >> ; ; k >>= )
if ((j ^= k) >= k)
break;
}
for (i = ; i < N; i <<= )
{
Vec *w = Get_w (i << );
for (j = ; j < N; j += i << )
{
Vec *b = a + j, *c = b + i;
for (k = ; k < i; ++ k)
{
Vec v = w[k] * c[k];
c[k] = b[k] - v;
b[k] = b[k] + v;
}
}
}
} void Mul (int *s, int *t, int N)
{
static Vec a[Max], b[Max], c[Max];
register int i, j;
for (i = ; i < N; ++ i)
{
a[i] = cal (s[i << ], s[i << | ]);
b[i] = cal (s[i << ], t[i << | ]);
}
FFT (a, N), FFT (b, N);
Vec *w = Get_w (N);
for (i = ; i < N; ++ i)
{
j = N - i & N - ;
c[j] = (conj (a[j] * b[j]) * cal() - (conj (a[j]) - a[i]) * (conj (b[j]) - b[i]) * ((i < N / ? w[i] : w[i - N / ] * cal(-)) + cal())) * cal(,.);
}
FFT (c, N);
for (i = ; i < N; ++ i)
{
s[i << ] = c[i].y / N + .;
s[i << | ] = c[i].x / N + .;
}
} int Main ()
{
freopen ("yukari.wife", "r", stdin);
fread (buf, , BUF, stdin); static int a[Max << ], b[Max << ];
int N, M;
read (N);
read (M); register int i;
for (i = ; i <= N; ++ i)
read (a[i]);
for (i = ; i <= M; ++ i)
read (b[i]);
int l = << std :: __lg (N + M + );
Mul (a, b, l >> );
for (i = , N += M; i <= N; ++ i)
printf ("%d ", a[i]);
return ;
}
int ZlycerQan = Main ();
int main (int argc, char *argv[]) {;}
炸掉的fft,改天再调的更多相关文章
- CAD在网页绘一个直线,得到直线id,再调该得到直线对象,然写扩展数据
IMxDrawDatabase::ObjectIdToObject 实体id返回实体对象. 参数 说明 [in] LONGLONG lId 实体id JS代码,中绘一个直线,得到直线id,再调该得到直 ...
- P3376 【模板】网络最大流(70)
题目描述 如题,给出一个网络图,以及其源点和汇点,求出其网络最大流. 输入输出格式 输入格式: 第一行包含四个正整数N.M.S.T,分别表示点的个数.有向边的个数.源点序号.汇点序号. 接下来M行每行 ...
- 再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT)
再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT) 目录 再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Blueste ...
- 转自 z55250825 的几篇关于FFT的博文(一)
关于FFT,咱们都会迫不及待地 @ .....(大雾)(貌似被玩坏了...) .....0.0学习FFT前先orz FFT君. 首先先是更详细的链接(手写版题解点赞0v ...
- 微信小程序-用户拒绝授权使用 wx.openSetting({}) 重新调起授权用户信息
场景模拟:用户进入微信小程序-程序调出授权 选择拒绝之后,需要用到用户授权才能正常使用的页面,就无法正常使用了. 解决方法:在用户选择拒绝之后,弹窗提示用户 拒绝授权之后无法使用,让用户重新授权(微信 ...
- fft ocean注解
针对这两篇教程: http://www.keithlantz.net/2011/10/ocean-simulation-part-one-using-the-discrete-fourier-tran ...
- MySql(十):MySQL性能调优——MySQL Server性能优化
本章主要通过针对MySQL Server( mysqld)相关实现机制的分析,得到一些相应的优化建议.主要涉及MySQL的安装以及相关参数设置的优化,但不包括mysqld之外的比如存储引擎相关的参数优 ...
- Tomcat性能调优及JVM内存工作原理
Java性能优化方向:代码运算性能.内存回收.应用配置. 注:影响Java程序主要原因是垃圾回收,下面会重点介绍这方面 代码层优化:避免过多循环嵌套.调用和复杂逻辑.Tomcat调优主要内容如下:1. ...
- [调参]CV炼丹技巧/经验
转自:https://www.zhihu.com/question/25097993 我和@杨军类似, 也是半路出家. 现在的工作内容主要就是使用CNN做CV任务. 干调参这种活也有两年时间了. 我的 ...
随机推荐
- 理解javascript中的立即执行函数(function(){})()(转)
原文:https://www.cnblogs.com/yanzp/p/6371292.html
- truncate删除一个分区,测试全局索引是否失效
目的,有一个清理数据的需求,需要删除历史的一个分区所有记录信息,但是存在主键global索引,如何更好的维护. 如下测试流程一 提前创建好一个已时间created 字段作为分区键的范围分区表 SQL& ...
- Visual Studio中找不到.Net Core SDK
在win 7 64位上安装了.Net Core 2.1 x86 SDK后,又卸载重新安装了.Net Core 3/2 x64 SDK.结果在VS中新建项目时没有.Net Core 3.1 SDK. 在 ...
- 基于【 建造者模式】一 || 网关zuul过滤器封装
一.springcloud的zuul网关拦截 1.黑名单拦截 2.参数验签 3.Api接口权限验证 二.网关拦截实现方式 1.继承ZuulFilter方法,实现业务逻辑 @Component @Slf ...
- 《你不知道的Javascript》感悟篇—对象属性遍历的那些事
划重点 本篇笔者将重点介绍JavaScript中 getOwnPropertyNames .Object.keys.for ... in 的使用及他们之间的异同点. getOwnPropertyNam ...
- [转]預防 Android Dex 64k Method Size Limit
转载自:http://ingramchen.io/blog/2014/09/prevention-of-android-dex-64k-method-size-limit.html 08 Septem ...
- ArcCatalog连接数据库报错
ArcCatalog连接数据库报错: Failed to connect to database. Cannot connect to database because the database cl ...
- javascript_09-数组
数组 //数组 // var array = new Array(); // array[0]="zs"; // array[1]="ls"; var name ...
- Manjaro安装mysql-5.7折腾小记
安装前准备: 现在Arch官方源是MariaDB,所以得从mysql官网下载,地址:https://www.mysql.com/downloads/ 选择一个合适的版本下载: 下载下来先将压缩文件解压 ...
- VMware14虚拟机与宿主机建立通讯
当我们在VMware14中运行虚拟机搭建实验环境就需要与我们的宿主机或另一台虚拟机连接通讯,下面我们就来看看如何建立通讯,实现虚拟机与宿主机.虚拟机与虚拟机互联互通. 准备环境:一台安装好VMware ...