关于我的码风

提前声明:在下用的是banner,外置一些奇怪的压行

像这样子:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int MAXN=1e7+10;
const double pi=acos(-1.0);
struct complex{
    double a,b;
    complex (double aa=0,double bb=0){a=aa;b=bb;}
  }A[MAXN],B[MAXN];
int id[MAXN],limit=1,l=0;
complex operator + (complex x,complex y){return complex(x.a+y.a , x.b+y.b);}
complex operator - (complex x,complex y){return complex(x.a-y.a , x.b-y.b);}
complex operator * (complex x,complex y){return complex(x.a*y.a-x.b*y.b , x.b*y.a+x.a*y.b);}
int n,m;
void fast_fast_tle(complex *T,int flag){
  for(int i=0;i<limit;i++)
  if(i<id[i])swap(T[i],T[id[i]]);
  for(int mid=1;mid<limit;mid<<=1){
    complex W(cos(pi/mid),flag*sin(pi/mid));
    for(int block=mid<<1,p=0;p<limit;p+=block){
      complex w(1,0);
      for(int k=0;k<mid;k++,w=w*W){
        complex pos1=T[p+k],pos2=w*T[p+mid+k];
        T[p+k]=pos1+pos2;
        T[p+mid+k]=pos1-pos2;
        }
      }
    }
  }
int main(){
  scanf("%d%d",&n,&m);
  for(int i=0;i<=n;i++)scanf("%lf",&A[i].a);
  for(int i=0;i<=m;i++)scanf("%lf",&B[i].a);
  while(limit<=n+m)limit<<=1,l++;
  for(int i=0;i<limit;i++)id[i]=(id[i>>1]>>1)|((i&1)<<(l-1));
  fast_fast_tle(A,1);
  fast_fast_tle(B,1);
  for(int i=0;i<=limit;i++)A[i]=A[i]*B[i];
  fast_fast_tle(A,-1);
  for(int i=0;i<=n+m;i++)
    printf("%d ",(int)(A[i].a/limit+0.5));
}

吐槽:这代码和我日常题解不是一个水平的呀 

猜你喜欢

转载自www.cnblogs.com/stepsys/p/10152350.html