A*B problem(FFT)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#define pi acos(-1)
#define rep(i,x,y) for(register int i = x; i <= y;++i)
using namespace std;
const int N = 3e5;
struct cpx
{
double r,i;
cpx(){ }
cpx(double x, double y) { r = x;i = y; }
inline cpx operator *(const cpx&x)const{
return cpx(r*x.r - i*x.i,r*x.i + i*x.r );
}
inline cpx operator *=(const cpx&x){
*this = *this * x;
}
inline cpx operator +(const cpx&x)const{
return cpx(r + x.r,i + x.i);
}
inline cpx operator -(const cpx&x)const{
return cpx(r - x.r,i - x.i);
}
}a[N],b[N];
int n,L,R[N],c[N];
char ch[N];
inline int read()
{
int x = ; char c;int sign = ;
do { c = getchar();if(c == '-') sign = -; }while(c < '' || c > '');
do { x = x* + c - '';c = getchar(); }while(c <= '' && c >= '');
x *= sign;
return x;
}
inline void fft(cpx*a,int f)
{
rep(i,,n-) if(i < R[i]) swap(a[i],a[R[i]]);
for(register int i = ;i < n;i <<= ) {
cpx wn(cos(pi/i),f*sin(pi/i));
for(register int j = ;j < n;j += (i<<)) {
cpx w(,);
for(register int k = ;k < i;++k,w *= wn) {
cpx x = a[j + k],y = w * a[j + k + i];
a[j + k] = x + y; a[j + k + i] = x - y;
}
}
}
if(f == -) rep(i,,n - ) a[i].r /= n;
}
int main()
{
n = read();n--;
scanf("%s",ch);
rep(i,,n) a[i].r = ch[n-i] - '';
scanf("%s",ch);
rep(i,,n) b[i].r = ch[n-i] - '';
int m = *n; for(n = ;n <= m ;n <<= ) ++L;
rep(i,,n-) R[i] = (R[i>>]>>)|((i&)<<(L-));
fft(a,);fft(b,);
rep(i,,n) a[i] *= b[i];
fft(a,-);
rep(i,,m) c[i] = (int)(a[i].r + 0.1);
rep(i,,m)
if(c[i] >= )
{
c[i+] += c[i] / ,c[i] %= ;
if(i == m) m++;
}
while(m) if(c[m]) break; else m--;
while(~m) printf("%d",c[m--]);
return ;
}
A*B problem(FFT)的更多相关文章
- 【CF954I】Yet Another String Matching Problem(FFT)
[CF954I]Yet Another String Matching Problem(FFT) 题面 给定两个字符串\(S,T\) 求\(S\)所有长度为\(|T|\)的子串与\(T\)的距离 两个 ...
- A * B Problem Plus HDU - 1402 (FFT)
A * B Problem Plus HDU - 1402 (FFT) Calculate A * B. InputEach line will contain two integers A and ...
- 【数学】快速傅里叶变换(FFT)
快速傅里叶变换(FFT) FFT 是之前学的,现在过了比较久的时间,终于打算在回顾的时候系统地整理一篇笔记,有写错的部分请指出来啊 qwq. 卷积 卷积.旋积或褶积(英语:Convolution)是通 ...
- 快速傅里叶(FFT)的快速深度思考
关于按时间抽取快速傅里叶(FFT)的快速理论深度思考 对于FFT基本理论参考维基百科或百度百科. 首先谈谈FFT的快速何来?大家都知道FFT是对DFT的改进变换而来,那么它究竟怎样改进,它改进的思想在 ...
- 【BZOJ3527】力(FFT)
[BZOJ3527]力(FFT) 题面 Description 给出n个数qi,给出Fj的定义如下: \[Fj=\sum_{i<j}\frac{q_i q_j}{(i-j)^2 }-\sum_{ ...
- 【BZOJ4827】【HNOI2017】礼物(FFT)
[BZOJ4827][HNOI2017]礼物(FFT) 题面 Description 我的室友最近喜欢上了一个可爱的小女生.马上就要到她的生日了,他决定买一对情侣手 环,一个留给自己,一 个送给她.每 ...
- FFT/NTT总结+洛谷P3803 【模板】多项式乘法(FFT)(FFT/NTT)
前言 众所周知,这两个东西都是用来算多项式乘法的. 对于这种常人思维难以理解的东西,就少些理解,多背板子吧! 因此只总结一下思路和代码,什么概念和推式子就靠巨佬们吧 推荐自为风月马前卒巨佬的概念和定理 ...
- 【BZOJ4503】两个串(FFT)
[BZOJ4503]两个串(FFT) 题面 给定串\(S\),以及带通配符的串\(T\),询问\(T\)在\(S\)中出现了几次.并且输出对应的位置. \(|S|,|T|<=10^5\),字符集 ...
- 【BZOJ4259】残缺的字符串(FFT)
[BZOJ4259]残缺的字符串(FFT) 题面 给定两个字符串\(|S|,|T|\),两个字符串中都带有通配符. 回答\(T\)在\(S\)中出现的次数. \(|T|,|S|<=300000\ ...
随机推荐
- asp.net(c#)中String.Empty、NULL、"" 三者到底有啥区别和联系?
开门见山,首先看下面代码,你认为结果分别是什么? string str = string.Empty; string str1 = ""; string str2 = null; ...
- input propertychange(1)
input type=“text” 通过js改变输入框的value值是不会出发input propertychange事件
- 对称加密,API加密
用于API加密,双方约定好signature_key对请求的参数进行处理 处理步骤如下 把请求的数据生成为key=>value的形式,然后拼接生成arg_key arg_key加上双方约定的si ...
- linux mint —— 图片一张
概述 Linux Mint是一種基於Ubuntu開發出的Linux操作系统.由Linux Mint Team团队于2006年开始发行.Linux Mint 的目标是为家庭用户和企业客户提供一个免费.高 ...
- $ListView的优化机制和滑动时数据错乱的讨论
Refer:http://www.myexception.cn/mobile/1612364.html (一)Android ListView的基本用法 1.创建一个实体类Person,为其添加Get ...
- 关于pycharm中的requirements.txt文件
作用:记录所有所依赖的第三方模块,方便迁移到不同的环境中后,防止缺少模块,或因为所依赖的第三方模块版本不同引起不必要的问题 生成命令:pip freeze > requirements.txt ...
- php数组函数-array_pad()
array_pad()函数向一个数组插入带有指定值的指定数量的元素. array_pad(array,size,value); array:必需.规定数组 size:必需.指定的长度.正数则填补到右侧 ...
- QT应用程序设置图标
一.纯Qt 1.下载图标:app.ico 2.新建记事本,输入:IDI_ICON1 ICON DISCARDABLE"app.ico":改变名字为jude.rc 3.将两个文件放在 ...
- Bootstrap3组件--2
目录 1. 分页 2. 标签 3. 徽章 4. 巨幕 5. 页头 6. 缩略图 7. 警告框 8. 进度条 9. 列表组 10. 面板 11.Well 1. 分页 <!doctype html& ...
- Centos6.5下Hbase安装
下载 http://mirror.bit.edu.cn/apache/hbase/hbase-0.94.26/hbase-0.94.26.tar.gz 2. 解压 tar -zxvf hbase-0 ...