【BZOJ2179】FFT快速傅立叶

Description

给出两个n位10进制整数x和y,你需要计算x*y。

Input

第一行一个正整数n。 第二行描述一个位数为n的正整数x。 第三行描述一个位数为n的正整数y。

Output

输出一行,即x*y的结果。

Sample Input

1
3
4

Sample Output

12

数据范围:

n<=60000

题解:板子题,敲板子~

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <iostream>
  4. #include <cmath>
  5. #define pi acos(-1.0)
  6. using namespace std;
  7. struct cp
  8. {
  9. double x,y;
  10. cp(double x0,double y0)
  11. {
  12. x=x0,y=y0;
  13. }
  14. cp(){}
  15. cp operator +(const cp a)const
  16. {
  17. return cp(x+a.x,y+a.y);
  18. }
  19. cp operator -(const cp a)const
  20. {
  21. return cp(x-a.x,y-a.y);
  22. }
  23. cp operator *(const cp a)const
  24. {
  25. return cp(x*a.x-y*a.y,x*a.y+y*a.x);
  26. }
  27. }n1[1<<20],n2[1<<20];
  28. int n;
  29. char str[1<<20];
  30. int ans[1<<20];
  31. int rd()
  32. {
  33. int ret=0,f=1; char gc=getchar();
  34. while(gc<'0'||gc>'9') {if(gc=='-')f=-f; gc=getchar();}
  35. while(gc>='0'&&gc<='9') ret=ret*10+gc-'0',gc=getchar();
  36. return ret*f;
  37. }
  38. void init(cp *a,int len)
  39. {
  40. int i,j,t=0;
  41. for(i=0;i<len;i++)
  42. {
  43. if(i>t) swap(a[i],a[t]);
  44. for(j=(len>>1);(t^=j)<j;j>>=1);
  45. }
  46. }
  47. void FFT(cp *a,int len,int f)
  48. {
  49. init(a,len);
  50. int h,i,j,k;
  51. cp t;
  52. for(h=2;h<=len;h<<=1)
  53. {
  54. cp wn(cos(f*2*pi/h),sin(f*2*pi/h));
  55. for(j=0;j<len;j+=h)
  56. {
  57. cp w(1,0);
  58. for(k=j;k<j+h/2;k++) t=w*a[k+h/2],a[k+h/2]=a[k]-t,a[k]=a[k]+t,w=w*wn;
  59. }
  60. }
  61. if(f==-1) for(i=0;i<len;i++) a[i].x=a[i].x/len;
  62. }
  63. void work(cp *a,cp *b,int len)
  64. {
  65. FFT(a,len,1),FFT(b,len,1);
  66. for(int i=0;i<len;i++) a[i]=a[i]*b[i];
  67. FFT(a,len,-1);
  68. for(int i=0;i<len;i++) ans[i]=int(a[i].x+0.1);
  69. }
  70. int main()
  71. {
  72. n=rd();
  73. int i,j,t=0,len=1;
  74. while(len<n*2) len<<=1;
  75. scanf("%s",str);
  76. for(i=0;i<n;i++) n1[n-i-1]=cp(str[i]-'0',0);
  77. scanf("%s",str);
  78. for(i=0;i<n;i++) n2[n-i-1]=cp(str[i]-'0',0);
  79. for(i=n;i<len;i++) n1[i]=n2[i]=cp(0,0);
  80. work(n1,n2,len);
  81. len=2*n-1;
  82. for(i=0;i<=len;i++) ans[i+1]+=ans[i]/10,ans[i]%=10;
  83. while(ans[len]<=0&&len) len--;
  84. for(i=len;i>=0;i--) printf("%d",ans[i]);
  85. return 0;
  86. }

【BZOJ2179】FFT快速傅立叶的更多相关文章

  1. [bzoj2179]FFT快速傅立叶_FFT

    FFT快速傅立叶 bzoj-2179 题目大意:给出两个n位10进制整数x和y,你需要计算x*y. 注释:$1\le n\le 6\times 10^4$. 想法: $FFT$入门题. $FFT$实现 ...

  2. BZOJ2179: FFT快速傅立叶 & caioj1450:【快速傅里叶变换】大整数乘法

    [传送门:BZOJ2179&caioj1450] 简要题意: 给出两个超级大的整数,求出a*b 题解: Rose_max出的一道FFT例题,卡掉高精度 = =(没想到BZOJ也有) 只要把a和 ...

  3. bzoj2179: FFT快速傅立叶

    #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> ...

  4. bzoj千题计划166:bzoj2179: FFT快速傅立叶

    http://www.lydsy.com/JudgeOnline/problem.php?id=2179 FFT做高精乘 #include<cmath> #include<cstdi ...

  5. BZOJ2179:FFT快速傅立叶(FFT)

    Description 给出两个n位10进制整数x和y,你需要计算x*y. Input 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位数为n的正整数y. Output 输出 ...

  6. BZOJ2179: FFT快速傅立叶 FFT实现高精度乘法

    Code: #include <cstdio> #include <algorithm> #include <cmath> #include <cstring ...

  7. 【bzoj2179】FFT快速傅立叶 FFT模板

    2016-06-01  09:34:54 很久很久很久以前写的了... 今天又比较了一下效率,貌似手写复数要快很多. 贴一下模板: #include<iostream> #include& ...

  8. BZOJ 2179: FFT快速傅立叶

    2179: FFT快速傅立叶 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2923  Solved: 1498[Submit][Status][Di ...

  9. 【BZOJ 2179】 2179: FFT快速傅立叶 (FFT)

    2179: FFT快速傅立叶 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 3308  Solved: 1720 Description 给出两个n位 ...

随机推荐

  1. 解决在IE9,IE10浏览器下,程序没有任何错误,easy ui页面不加载任何数据的问题

    对于web应用程序,经常用到开发人员工具,按F12,可以调试脚本,可以查看监视网络,查看各页面加载时间,非常方便,今天在调试js时,不小心打开了兼容性视图, 之后每次打打开页面时,均不显示页面post ...

  2. css中属性值继承小解

    继承:html元素可以从父元素那里继承一部分css属性,即使当前元素没有定义该属性. 1.css可以和不可以继承的属性 不可继承的:display.margin.border.padding.back ...

  3. 算法----堆排序(heap sort)

    堆排序是利用堆进行排序的高效算法,其能实现O(NlogN)的排序时间复杂度,详细算法分析能够点击堆排序算法时间复杂度分析. 算法实现: 调整堆: void sort::sink(int* a, con ...

  4. php 获取客户端的浏览器信息

     就是访问的时候,通过服务端来判断用户是否为移动端,如果是的话就重定向(移动端的页面).事实上现在都是一套搞定的了. 但是还是记录一下吧.没准以后用的到   http://detectmobilebr ...

  5. mysql-multi source replication 配置

    1.关键步骤 change master to master_host='172.16.192.201', master_port, master_user='repl', master_passwo ...

  6. 定时检测Memcached进程是否存在,若不存在自动启动它

    由于一台WEB服务器的Memcached死掉而导致在访问网站的某些页面时候打不开.下面脚本会自动检测Memcached的进程,如果挂掉则自动重启Memcached服务. vim memcached_c ...

  7. GNU Linux高并发性能优化方案

    /*********************************************************** * Author : Samson * Date : 07/14/2015 * ...

  8. SQL server账号无法登陆

  9. 基于Verilog语言的FIR滤波【程序和理解】

    一直想找一个简单.清晰.明了的fir滤波器的设计,终于找到了一个可以应用的,和大家分享一下,有助于FPGA新手入门. 1.说道fir滤波器,滤波系数肯定是最重要的,因为后面程序中涉及到滤波系数问题,所 ...

  10. [gj]耶稣和撒旦的关系

    转: https://zhidao.baidu.com/question/7461904.html 人生充满试探,无论你居住在乡间或城市,都尝会受到试探,耶稣在世上的日子,也受到试探,让我们看看两处经 ...