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\ ...
随机推荐
- Armijo-Goldstein准则与Wolfe-Powell准则
Armijo-Goldstein准则与Wolfe-Powell准则是不精确的一维搜索的两大准则. 之所以要遵循这些准则是为了能使算法收敛(求最优解).即要使我们的不精确的一维搜索的步长满足一定的规则, ...
- phonegap file api
https://github.com/chrisben/imgcache.js/tree/master/examples 1.FILE API file api最大的两个功能是download和upl ...
- 爬虫五 Beautifulsoup模块详细
一.基本使用 from bs4 import BeautifulSoup htmlCharset = "GB2312" soup=BeautifulSoup(html_doc,'l ...
- oracle导入数据库报错:IMP-00019: 由于 ORACLE 错误 12899 而拒绝行 IMP-00003: 遇到 ORACLE 错误 12899
主要是字符集 成 导入的Oracle服务器的字符集 对应不上. 以下方案为是修改服务器的字符集. 这样会影响之前的Oracle其他数据库的数据显示(正式服务器慎用) 个人认为应该修改导出文件的字 ...
- 联合文件系统 unionfs
- 深入浅出Node.js(上)
(一):什么是Node.js Node.js从2009年诞生至今,已经发展了两年有余,其成长的速度有目共睹.从在github的访问量超过Rails,到去年底Node.jsS创始人Ryan Dalh加盟 ...
- Ajax+Spring MVC实现跨域请求(JSONP)
背景: AJAX向后台(springmvc)发送请求,报错:已阻止交叉源请求:同源策略不允许读取 http://127.0.0.1:8080/DevInfoWeb/getJsonp 上的远程资源.可 ...
- windows下载Mysql-python
Mysql-python第三方模块官方不支持windows系统,而国外大学提供了非官方 的支持windows系统的模块,可前往 https://www.lfd.uci.edu/~gohlke/pyth ...
- 换行符在textarea、div、pre中的区别
关于换行符,网上有许多说法,IE早期的浏览器是\r\n,有的浏览器是\r,但很难找到确切的版本号.经过本人正则匹配测试,chrome.firefox.safari.IE11都是\n, 因此保险起见,若 ...
- 用代码实现断开Android手机USB连接【转】
本文转载自:https://blog.csdn.net/phoebe_2012/article/details/47025309 用代码实现断开Android手机USB连接 ...