luogu1919 A*BProblem升级版 (FFT)
把一个n位数看做n-1次的多项式,每一项的系数是反过来的每一位
最后每一项系数进进位搞一搞就行了
(数组一定要开到2的次数..要不然极端数据会RE)
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
const int maxn=;
const double Pi=acos(-); struct Cpx{
double x,y;
Cpx(double xx=,double yy=){x=xx;y=yy;}
}X[maxn],Y[maxn];
Cpx operator *(Cpx a,Cpx b){return Cpx(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);}
Cpx operator +(Cpx a,Cpx b){return Cpx(a.x+b.x,a.y+b.y);}
Cpx operator -(Cpx a,Cpx b){return Cpx(a.x-b.x,a.y-b.y);}
int N,M,rev[maxn],ans[maxn]; void rd(Cpx *A){
char c=getchar();
while(c<''||c>'') c=getchar();
int i=N-;
while(c>=''&&c<='') A[i--].x=(int)(c-''),c=getchar();
} void fft(Cpx *A,int opt){
for(int i=;i<N;i++) if(i<rev[i]) swap(A[i],A[rev[i]]);
for(int l=;l<N;l<<=){
Cpx wn=Cpx(cos(Pi/l),opt*sin(Pi/l));int step=l<<;
for(int i=;i<N;i+=step){
Cpx w=Cpx(,);
for(int k=;k<l;k++,w=w*wn){
Cpx a=A[i+k],b=A[i+k+l]*w;
A[i+k]=a+b;A[i+k+l]=a-b;
}
}
}
} int main(){
int i,j,k;
scanf("%d",&N);M=N*-;
rd(X);rd(Y);
for(i=,j=;i<M;i<<=,j++);N=i;
for(i=;i<N;i++) rev[i]=(rev[i>>]>>)|((i&)<<(j-));
fft(X,);fft(Y,);
for(i=;i<N;i++) X[i]=X[i]*Y[i];fft(X,-);
for(i=;i<M;i++)
j=(int)(X[i].x/N+0.5),ans[i+]=(ans[i]+j)/,ans[i]=(ans[i]+j)%;
for(i=M;i>=&&!ans[i];i--);
for(;i>=;i--) printf("%d",ans[i]);
}
luogu1919 A*BProblem升级版 (FFT)的更多相关文章
- 洛谷.1919.[模板]A*B Problem升级版(FFT)
题目链接:洛谷.BZOJ2179 //将乘数拆成 a0*10^n + a1*10^(n-1) + ... + a_n-1的形式 //可以发现多项式乘法就模拟了竖式乘法 所以用FFT即可 注意处理进位 ...
- P1919 【模板】A*B Problem升级版 /// FFT模板
题目大意: 给定l,输入两个位数为l的数A B 输出两者的乘积 FFT讲解 这个讲解蛮好的 就是讲解里面贴的模板是错误的 struct cpx { double x,y; cpx(double _x= ...
- 初探FFT(快速傅里叶变换)
第一次接触省选的知识点呢!zrf大佬在课堂上讲的非常清楚,但由于本蒟蒻实在太菜了,直接掉线了.今天赶紧恶补一下. 那么这篇博客将分为两块,第一块是FFT的推导和实现,第二块则是FFT在OI上的应用 因 ...
- 【Luogu1919】 A*B Problem升级版(FFT)
题面戳我 题解 把每个数都直接看做一个多项式,每一位就是一项 现在求用FFT求出卷积 然后考虑一下进位就可以啦 #include<iostream> #include<cstdio& ...
- Luogu1919 【模板】A*B Problem升级版(FFT)
简单的\(A*B\) \(Problem\),卡精度卡到想女装 #include <iostream> #include <cstdio> #include <cstri ...
- 洛谷P1919 【模板】A*B Problem升级版 题解(FFT的第一次实战)
洛谷P1919 [模板]A*B Problem升级版(FFT快速傅里叶) 刚学了FFT,我们来刷一道模板题. 题目描述 给定两个长度为 n 的两个十进制数,求它们的乘积. n<=100000 如 ...
- [Luogu 1919]【模板】A*B Problem升级版(FFT快速傅里叶)
Description 给出两个n位10进制整数x和y,你需要计算x*y. Input 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数为n的正整数y. Output 输出 ...
- Luogu P1919 【模板】A*B Problem升级版(FFT快速傅里叶_FFT
这其实就是一道裸的FFT 核心思想:把两个数拆成两个多项式用FFT相乘,再反序输出 py解法如下: input() print(int(input())*int(input())) 皮一下hihi f ...
- 洛谷 P1919 【模板】A*B Problem升级版(FFT快速傅里叶)
题目来源 吐槽下P3803都是紫题... 真心好写,本想一遍过的...但是 我真是太菜了... #include<bits/stdc++.h> using namespace std; ; ...
随机推荐
- 解决scrapy报错:ModuleNotFoundError: No module named 'win32api'
ModuleNotFoundError: No module named 'win32api' 表示win32api未安装 解决办法: 下载对应python版本的win32api,并安装. 下载地址: ...
- [转帖]pfSense软路由系统的使用
图解pfSense软路由系统的使用(NAT功能) http://seanlook.com/2015/04/23/pfsense-usage/ 发表于 2015-04-23 | 更新于: 2015- ...
- Day 4-9 subprocess模块
我们经常需要通过Python去执行一条系统命令或脚本,系统的shell命令是独立于你的python进程之外的,每执行一条命令,就是发起一个新进程,通过python调用系统命令或脚本的模块在python ...
- python之路--初识函数
一 . 函数 什么是函数 f(x) = x + 1 y = x + 1 # 函数是对功能或者动作的封装 函数的语法 def 函数名(): 函数体 调用: 函数名() def play(): print ...
- Java之ArrayList自定义排序,通过实现comparator比较器接口
两种排序方式: 1.实体类实现Comparable接口,重写compareTo(T o)方法,在其中定义排序规则,那么就可以直接调用Collections.sort()来排序对象数组 2.在调用方法的 ...
- JDBC 初始。
package cn.zhouzhou; /* 一.JDBC? 1.(java date base connectivity,java)是一种用于执行SQL语句的java API . 2.jdbc本质 ...
- Lodop控件NewPage();测试输出空白页
LODOP.NewPage();和LODOP.NewPageA();是强制分页语句,两者的区别可查看本博客的相关博文:Lodop强制分页LODOP.NewPage()和LODOP.NewPageA() ...
- linode上切换Linux到FreeBSD
PS:不是真正的无缝切换,数据需要自己备份.还原. Linode官方给出了一篇文章:https://www.linode.com/docs/tools-reference/custom-kernels ...
- How to reset macOS Icon Cache
find . -name cuthead.txt find /private/var/folders/ -name 'com.apple.dock.iconcache' -delete find /p ...
- Cisco IP 电话 将它的voice mail 发送到手机
功能一.将语音转成文字发送短信(有微软认知.百度认知.云片短信API) 功能二.直接将音频发送到微信 不废话,直接送个包 链接: https://github.com/JaviZhu/KLCN.Spe ...