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\ ...
随机推荐
- android学习二---解决ADT Buddle无法自动生成layout和res
开发环境: 1)windows 7 64位 2)adt-bundle-windows-x86_64-20140624 3)Android Development Toolkit Version: 23 ...
- 使用git工具上传项目到github步骤
这里记录一下上传项目到github的步骤.使用的工具是Git bash. 1.登陆github,没有账户就注册一个,新建一个Repository(仓库). 2.绑定用户. 因为Git是分布式版本控制系 ...
- 【Maven】应用Maven生成jar,包含关联库
1. java project直接export到处jar包就可以,但在导出的过程中需要指定main class入口. 2. spring boot的项目,应用maven管理库,希望打成jar包,部署到 ...
- android开发之网络棋牌类在线游戏开发心得(服务器端、Java) 好文章值得收藏
标签: android服务器 2013-10-09 17:28 3618人阅读 评论(0) 收藏 举报 分类: android(11) 转自:http://blog.csdn.net/bromon/a ...
- python 课堂笔记-if语句
# Author:zyl _username = 'zyl' _password = 'zyl123' username = input("username:") password ...
- 【HackerRank】Lonely Integer
There are N integers in an array A. All but one integer occur in pairs. Your task is to find out the ...
- 纯CSS3动画按钮效果
在线演示 本地下载
- R中的运算符,条件语句,控制语句
1.运算符 算术运算符:+,-,*,/ 关系运算符:==,!=,>,>=,<,<= 逻辑运算符:&,|,&&,||,! &和|称为短逻辑符,&a ...
- 恢复性训练day1
DP: 0/1背包一个常见的错误是没有cmax(f[i][j],f[i-1][j]) 0/1背包的拓展中有转移式的变形,以及无限数量背包,分组背包等. 可化为背包问题的一般不会太难. 数组开小,出现大 ...
- DBUtiles中的简单使用(QueryRunner和ResultSetHandler的手动实现)
DBUtiles是一个很好的处理JDBC的工具类.(DbUtils is a small set of classes designed to make working with JDBC easie ...