洛谷 P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
吐槽下P3803都是紫题...
真心好写,本想一遍过的...但是

我真是太菜了...
#include<bits/stdc++.h>
using namespace std;
const int MAXN=;
const double pi=acos(-1.0);
char x[MAXN],y[MAXN];
int sum,lena,lenb,l;
int TT[MAXN],c[MAXN];
int r;
int n,m;
struct Node{
//int x;
double x;
double y;
Node (double x1=,double y1=){
x=x1,y=y1;
}
}a[MAXN],b[MAXN];
Node operator * (Node x,Node y){
return Node(x.x*y.x-x.y*y.y,x.x*y.y+x.y*y.x);
}
Node operator + (Node x,Node y){
return Node(x.x+y.x,x.y+y.y);
}
Node operator - (Node x,Node y){
return Node(x.x-y.x,x.y-y.y);
}
inline void fft(Node *g,double tf){
for (int i=;i<sum;++i)
if (i<c[i])
swap(g[i],g[c[i]]);
for (int j=;j<sum;j<<=){
Node T(cos(pi/j),tf*sin(pi/j));
for (int k=;k<sum;k+=(j<<)){
Node T1(,);
for (int l=;l<j;l++,T1=T*T1){
Node x1=g[k+l];
Node y1=T1*g[k+j+l];
g[k+l]=x1+y1;
g[k+j+l]=x1-y1;
}
}
}
}
int main(){
scanf("%d",&n);
scanf("%s%s",x,y);
//printf("%s",x);
for (int i=n-;i>=;i--){
a[lena++].x=x[i]-;
b[lenb++].x=y[i]-;
}
sum=;
while (sum<n+n) sum<<=,l++;
for (int i=;i<=sum;++i)
c[i]=(c[i>>]>>)|((i&)<<(l-));
fft(a,),fft(b,);
for (int i=;i<=sum;++i)
a[i]=a[i]*b[i];
fft(a,-);
for (int i=;i<=sum;++i){
TT[i]+=(int) (a[i].x/sum+0.5);
if (TT[i]>=){
TT[i+]+=TT[i]/;
TT[i]%=;
if (i==sum)
sum++;
}
}
while (!TT[sum] && sum>=)
sum--;
sum++;
while (--sum>=)
printf("%d",TT[sum]);
return ;
}
洛谷 P1919 【模板】A*B Problem升级版(FFT快速傅里叶)的更多相关文章
- 洛谷.1919.[模板]A*B Problem升级版(FFT)
题目链接:洛谷.BZOJ2179 //将乘数拆成 a0*10^n + a1*10^(n-1) + ... + a_n-1的形式 //可以发现多项式乘法就模拟了竖式乘法 所以用FFT即可 注意处理进位 ...
- 【洛谷P1919】A*B Problem升级版
题目大意:rt 题解:将长度为 N 的大整数看作是一个 N-1 次的多项式,利用 FFT 计算多项式的卷积即可. 代码如下 #include <bits/stdc++.h> using n ...
- 洛谷P1919 【模板】A*B Problem升级版 题解(FFT的第一次实战)
洛谷P1919 [模板]A*B Problem升级版(FFT快速傅里叶) 刚学了FFT,我们来刷一道模板题. 题目描述 给定两个长度为 n 的两个十进制数,求它们的乘积. n<=100000 如 ...
- 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)
To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...
- 洛谷P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
题目描述 给出两个n位10进制整数x和y,你需要计算x*y. 输入输出格式 输入格式: 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数为n的正整数y. 输出格式: 输出一 ...
- 洛谷P1919 A*B problem 快速傅里叶变换模板 [FFT]
题目传送门 A*B problem 题目描述 给出两个n位10进制整数x和y,你需要计算x*y. 输入输出格式 输入格式: 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数 ...
- 【AC自动机】洛谷三道模板题
[题目链接] https://www.luogu.org/problem/P3808 [题意] 给定n个模式串和1个文本串,求有多少个模式串在文本串里出现过. [题解] 不再介绍基础知识了,就是裸的模 ...
- 洛谷P3375 [模板]KMP字符串匹配
To 洛谷.3375 KMP字符串匹配 题目描述 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来还要输出子串的前缀数组next.如果 ...
- LCT总结——概念篇+洛谷P3690[模板]Link Cut Tree(动态树)(LCT,Splay)
为了优化体验(其实是强迫症),蒟蒻把总结拆成了两篇,方便不同学习阶段的Dalao们切换. LCT总结--应用篇戳这里 概念.性质简述 首先介绍一下链剖分的概念(感谢laofu的讲课) 链剖分,是指一类 ...
- 【洛谷p1601】A+B Problem(高精)
高精度加法的思路还是很简单容易理解的 A+B Problem(高精)[传送门] 洛谷算法标签: 附上代码(最近懒得一批) #include<iostream> #include<cs ...
随机推荐
- Spring是如何校验XML的
首先来看下xml的一些概念: xml的schema里有namespace,可以给它起个别名.比如常见的spring的namespace: xmlns:mvc="http://www.spri ...
- Some beautiful Progress Bars in WPF
1.Better WPF Circular Progress Bar 2.Bending the WPF ProgressBar 3.A CIRCULAR PROGRESSBAR STYLE USIN ...
- null值经过强转会怎样?
null还是null,类型不会改变的,也不会报错!
- 【git】git add 添加错文件 撤销
git add 添加 多余文件 这样的错误是由于, 有的时候 可能 git add . (空格+ 点) 表示当前目录所有文件,不小心就会提交其他文件 git add 如果添加了错误的文件的话 撤销操 ...
- php分割中文字符串为数组的简单例子
近日在做东西时,遇到要把中文字符进行逐字分割,试了很多方法,都不行,后来发现了一个超简单的方法: 分割字符串很简单,主要是用到函数preg_match_all.当处理含有中文的字符串时,可以用如下的方 ...
- vue element-ui 绑定@keyup事件无效
解决办法: <el-input @keyup.native="ajax"></el-input> 加上.native覆盖原有封装的keyup事件即可
- php配置-解决大数据超多字段的POST方式提交无法完全接受的问题
例如:在盘点表的数据提交中出现了POST大量数据超多字段的将近2000个字段,部分字段没有接受:修改方法为修改php.ini 将max_input_var调大,该值默认为1000 max_input_ ...
- Xamarin 简化的Android密钥库签名
安装 开始使用这个新工具不容易.在Visual Studio 2017(即将推出VS 2015),只需转到工具 - >扩展和更新,并搜索“密钥库”来查找扩展名. 下载后,只需重新启动Visual ...
- 高度可配置的 Linux 内存守护程序 Nohang!
导读 Nohang 是一个 Linux 守护程序,也是一个高度可配置的 OOM(内存溢出)阻止工具,适用于 Linux 系统,能够有效地防止内存不足的情况. 部分功能特性 具有良好注释的配置文件,配置 ...
- js查漏补缺【未完】
1.初始 1.小补. 1.在文本字符串中使用反斜杠对代码行进行换行. document.write("Hello \ World!"); 2.document.write docu ...