炸掉的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任务. 干调参这种活也有两年时间了. 我的 ...
随机推荐
- 正确使用SQLCipher来加密Android数据库
Android本身自带有不加密的数据库SQLite,如果要保存密码之类的敏感数据在本地的话方法一是使用字段加密解密算法,方法二是整个数据库都加密掉.如果只是加密解密某个字段(如password)就推荐 ...
- C#ModBus Tcp 报文解析
上一篇博客已经完成 C#ModBus Tcp Master的实现 本篇主要对不同的功能码所发出的报文进行解析(包括请求报文及响应报文) 读操作 功能码 0x01 读一组线圈 读取站号为1 从地址12开 ...
- 命令行参数 && json 协议 && 自定义 error 类型
命令行参数 在写代码的时候,在运行程序做一些初始化操作的时候,往往会通过命令行传参数到程序中,那么就会用到命令行参数 例如,指定程序运行的模式和级别: go run HTTPServer.go --m ...
- 1-JavaScript变量
对于JS的变量这个环节,其实主要要了解一下JS数据类型的存储方法 JS有两种不同的数据类型:基本类型(原始类型),引用类型(对象类型). 1.栈 (stack) 和 堆 (heap) 栈 (stack ...
- 碰撞器Colider 触发器
碰撞器可以让所依附的游戏物件对其他碰撞体产生碰撞行为(其他游戏物体必须具有Rigidbody组件) 对于不规则形状的物体,通常使用组合式碰撞体而不是网格碰撞器,以为网格碰撞器以模型的网格为基础,更为复 ...
- Shiro安全框架入门使用方法
详见:https://blog.csdn.net/qq_32651225/article/details/77199464 框架介绍Apache Shiro是一个强大且易用的Java安全框架,执行身份 ...
- java - day015 - 手写双向链表, 异常(续), IO(输入输出)
类的内存分配 加载到方法区 对象在堆内存 局部变量在栈内存 判断真实类型,在方法区加载的类 对象.getClass(); 类名.class; 手写双向链表 package day1501_手写双向链表 ...
- Pyspark笔记一
1. pyspark读csv文件后无法显示中文 #pyspark读取csv格式时,不能显示中文 df = spark.read.csv(r"hdfs://mymaster:8020/user ...
- Nginx access_log日志添加返回字段
主要为方便单用户请求日志回溯分析 记录用户标记. 将用户信息打印在access_log 日志里. 步骤: 1.重写nginx 的log格式 一般是地址是 /etc/nginx/conf.d/ng ...
- js rsa sign使用笔记(加密,解密,签名,验签)
你将会收获: js如何加密, 解密 js如何签名, 验签 js和Java交互如何相互解密, 验签(重点) 通过谷歌, 发现jsrsasign库使用者较多. 查看api发现这个库功能很健全. 本文使用方 ...