CODEVS3123 a*b problem plus (FFT)
type xh=record
x,y:double;
end;
arr=array[..] of xh;
var n,m:longint;
s1,s2:ansistring;
a,b,g,w:arr;
ch:char;
operator -(a,b:xh) c:xh;
begin
c.x:=a.x-b.x;
c.y:=a.y-b.y;
end;
operator +(a,b:xh) c:xh;
begin
c.x:=a.x+b.x;
c.y:=a.y+b.y;
end;
operator *(a,b:xh) c:xh;
begin
c.x:=a.x*b.x-a.y*b.y;
c.y:=a.x*b.y+a.y*b.x;
end;
procedure dft(var a:arr;s,t:longint);//a待处理数组 s初始位置 <<t长度
var i,p:longint;
cnt:xh;
begin
if n>>t= then exit;
dft(a,s,t+); dft(a,s+<<t,t+);
for i:= to n>>t>>- do
begin
p:=i<<t<<+s;
cnt:=w[i<<t]*a[p+<<t];
g[i]:=a[p]+cnt;
g[i+n>>t>>]:=a[p]-cnt;
end;
for i:= to n>>t- do a[s+i<<t]:=g[i];
end;
procedure clr(var a:arr);
begin
fillchar(a,sizeof(a),);
end;
procedure FFT;
var i,len:longint;
lx:longint;
begin
n:=;
while n<m<< do n:=n<<;
for i:= to n- do w[i].x:=cos(pi**i/n);
for i:= to n- do w[i].y:=sin(pi**i/n);
dft(a,,); dft(b,,);
for i:= to n- do a[i]:=a[i]*b[i];
for i:= to n- do w[i].y:=-w[i].y; //!!!!
dft(a,,);
for i:=m<<- downto do a[i].x:=a[i].x/n;//!!!!
for i:= to m<<- do
begin
lx:=round(a[i].x);
a[i+].x:=a[i+].x+lx div ;
a[i].x:=lx mod ;
end;
len:=m<<-;
while a[len].x<1e-12 do dec(len);
for i:=len downto do write(a[i].x::);
writeln;
end;
procedure main;
var i:longint;
begin
read(ch);
while ord(ch)>= do begin s1:=s1+ch; read(ch); end;
readln(s2);
clr(a); clr(b);
for i:=length(s1) downto do a[length(s1)-i].x:=ord(s1[i])-;
for i:=length(s2) downto do b[length(s2)-i].x:=ord(s2[i])-;
if length(s1)>length(s2) then m:=length(s1) else m:=length(s2);
FFT;
end;
begin
main;
end.
CODEVS3123 a*b problem plus (FFT)的更多相关文章
- hdu 1402 A * B Problem Plus FFT
/* hdu 1402 A * B Problem Plus FFT 这是我的第二道FFT的题 第一题是完全照着别人的代码敲出来的,也不明白是什么意思 这个代码是在前一题的基础上改的 做完这个题,我才 ...
- 【CF954I】Yet Another String Matching Problem(FFT)
[CF954I]Yet Another String Matching Problem(FFT) 题面 给定两个字符串\(S,T\) 求\(S\)所有长度为\(|T|\)的子串与\(T\)的距离 两个 ...
- A * B Problem Plus(fft)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1402 hdu_1402:A * B Problem Plus Time Limit: 2000/100 ...
- HDU 1402 A * B Problem Plus (FFT求高精度乘法)
A * B Problem Plus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDU1402 A * B Problem Plus FFT
分析:网上别家的代码都分析的很好,我只是给我自己贴个代码,我是kuangbin的搬运工 一点想法:其实FFT就是快速求卷积罢了,当小数据的时候我们完全可以用母函数来做,比如那种硬币问题 FFT只是用来 ...
- HDU-1402 A * B Problem Plus FFT(快速傅立叶变化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1402 一般的的大数乘法都是直接模拟乘法演算过程,复杂度O(n^2),对于这题来说会超时.乘法的过程基本 ...
- HDU 1402 A * B Problem Plus (FFT模板题)
FFT模板题,求A*B. 用次FFT模板需要注意的是,N应为2的幂次,不然二进制平摊反转置换会出现死循环. 取出结果值时注意精度,要加上eps才能A. #include <cstdio> ...
- HDU - 1402 A * B Problem Plus FFT裸题
http://acm.hdu.edu.cn/showproblem.php?pid=1402 题意: 求$a*b$ 但是$a$和$b$的范围可以达到 $1e50000$ 题解: 显然...用字符串模拟 ...
- 洛谷.1919.[模板]A*B Problem升级版(FFT)
题目链接:洛谷.BZOJ2179 //将乘数拆成 a0*10^n + a1*10^(n-1) + ... + a_n-1的形式 //可以发现多项式乘法就模拟了竖式乘法 所以用FFT即可 注意处理进位 ...
随机推荐
- JS基础--问题记录
1. {}var a={};{}是一个空的对象,是 new Object();的简写. 2.判断元素是存在 //jQuery 对象中元素的个数.当前匹配的元素个数. size 将返回相同的值. if ...
- 集成 Apple Pay
作者感言 在中秋过后终于把国内的三大支付平台SDK集成都搞定了, 现在我们终于可以来研究Apple自家的支付Apple Pay最后:如果你有更好的建议或者对这篇文章有不满的地方, 请联系我, 我会参考 ...
- .NET 向SQL里写入非Text类型
一般来说,在更新DataTable或是DataSet时,如果不采用SqlParameter,那么当输入的Sql语句出现歧义时,如字符串中含有单引号,程序就会发生错误,并且他人可以轻易地通过拼接Sql语 ...
- EF5.X Code First表关联与延迟加载
1-指定导航属性,会自动生成外键,命名规则为:“表名_主键名”2-默认情况下与导航属性的主键名称相同的字段会自动被标记为外键3-通过[ForeignKey]标记指定实体类的属性为外键,4-方式2的升级 ...
- 开源项目导入eclipse的一般步骤[转]
下载到开源项目后,我们还是希望导入到eclipse中还看,这样要方便点,一般的步骤是这样的 打开源代码目录, 如果看到里面有.calsspath .project文件,那么说明这个项目本来就是ec ...
- mybatis使用
mybatis网站:http://mybatis.github.io/spring/zh/ mybatis spring下载网址:https://github.com/mybatis/spring/r ...
- 深入理解Redis:底层数据结构
简介 redis[1]是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(sorte ...
- js基础之弹性运动(四)
一.滑动菜单.图片 var iSpeed=0;var left=0;function startMove(obj,iTarg){ clearInterval(obj.timer);//记得先关定时器 ...
- tab模块
#!/usr/bin/env python # python startup file import sys import readline import rlcompleter import ate ...
- soap
sudo apt-get update apt-get install php-soapphp-config --configure-options --enable-soap php -i | gr ...