• fft模板 HDU 1402


      1 // fft模板 HDU 1402
      2 
      3 #include <iostream>
      4 #include <cstdio>
      5 #include <cstdlib>
      6 #include <algorithm>
      7 #include <vector>
      8 #include <math.h>
      9 #include <memory.h>
     10 #include <bits/stdc++.h>
     11 using namespace std;
     12 #define LL long long
     13 typedef pair<int,int> pii;
     14 const LL inf = 0x3f3f3f3f;
     15 const LL MOD =100000000LL;
     16 const int N = 150010;
     17 const double eps = 1e-8;
     18 void fre() {freopen("in.txt","r",stdin);}
     19 void freout() {freopen("out.txt","w",stdout);}
     20 inline int read() {int x=0,f=1;char ch=getchar();while(ch>'9'||ch<'0') {if(ch=='-') f=-1; ch=getchar();}while(ch>='0'&&ch<='9') {x=x*10+ch-'0';ch=getchar();}return x*f;}
     21 
     22 
     23 const double PI = acos(-1.0);
     24 //复数结构体
     25 struct Complex{
     26     double r,i;
     27     Complex(double _r = 0.0,double _i = 0.0){
     28         r = _r; i = _i;
     29     }
     30     Complex operator +(const Complex &b){
     31         return Complex(r+b.r,i+b.i);
     32     }
     33     Complex operator -(const Complex &b){
     34         return Complex(r-b.r,i-b.i);
     35     }
     36     Complex operator *(const Complex &b){
     37         return Complex(r*b.r-i*b.i,r*b.i+i*b.r);
     38     }
     39 };
     40 /*
     41  * 进行FFT和IFFT前的反转变换。
     42  * 位置i和 (i二进制反转后位置)互换
     43  * len必须去2的幂
     44  */
     45 void change(Complex y[],int len){
     46     int i,j,k;
     47     for(i = 1, j = len/2;i < len-1; i++){
     48         if(i < j)swap(y[i],y[j]);
     49         //交换互为小标反转的元素,i<j保证交换一次
     50         //i做正常的+1,j左反转类型的+1,始终保持i和j是反转的
     51         k = len/2;
     52         while( j >= k){
     53             j -= k;
     54             k /= 2;
     55         }
     56         if(j < k) j += k;
     57     }
     58 }
     59 /*
     60  * 做FFT
     61  * len必须为2^k形式,
     62  * on==1时是DFT,on==-1时是IDFT
     63  */
     64 void fft(Complex y[],int len,int on){
     65     change(y,len);
     66     for(int h = 2; h <= len; h <<= 1){
     67         Complex wn(cos(-on*2*PI/h),sin(-on*2*PI/h));
     68         for(int j = 0;j < len;j+=h){
     69             Complex w(1,0);
     70             for(int k = j;k < j+h/2;k++){
     71                 Complex u = y[k];
     72                 Complex t = w*y[k+h/2];
     73                 y[k] = u+t;
     74                 y[k+h/2] = u-t;
     75                 w = w*wn;
     76             }
     77         }
     78     }
     79     if(on == -1)
     80         for(int i = 0;i < len;i++)
     81             y[i].r /= len;
     82 }
     83 
     84 Complex a[N],b[N];
     85 char s1[N/2],s2[N/2];
     86 int ans[N];
     87 int main(){
     88     while(~scanf("%s%s",s1,s2)){
     89          int len1=strlen(s1);
     90          int len2=strlen(s2);
     91          int l1=0,l2=0;
     92          while((1<<l1)<len1) l1++;
     93          while((1<<l2)<len2) l2++;
     94          int len=(1<<(max(l1,l2)+1));
     95          for(int i=0;i<len;i++){
     96             if(i<len1) a[i]=Complex(s1[len1-i-1]-'0',0);
     97             else a[i]=Complex(0,0);
     98             if(i<len2) b[i]=Complex(s2[len2-i-1]-'0',0);
     99             else b[i]=Complex(0,0);  
    100          }
    101          fft(a,len,1);
    102          fft(b,len,1);
    103          for(int i=0;i<len;i++)
    104             a[i]=a[i]*b[i];
    105          fft(a,len,-1);
    106          for(int i=0;i<len;i++)
    107             ans[i]=(int)(a[i].r+0.5);
    108          for(int i=0;i<len-1;i++){
    109             ans[i+1]+=ans[i]/10;
    110             ans[i]%=10;
    111          }
    112          bool flag=false;
    113          for(int i=len-1;i>=0;i--){
    114             if(ans[i]) printf("%d",ans[i]),flag=true;
    115             else if(flag||i==0)printf("0");
    116         }
    117         printf("
    ");
    118     }
    119     return 0;
    120 }
  • 相关阅读:
    Access-自定义控件TabControl
    Excel公式-求最低价网站名字
    Excel图表-太极图
    Excel图表-"DNA"图
    VB中的GDI编程-2 画笔
    leetcode
    leetcode
    leetcode
    leetcode
    leetcode
  • 原文地址:https://www.cnblogs.com/ITUPC/p/5918189.html
Copyright © 2020-2023  润新知