FFT本地运行正确,提交WA,求助
查看原帖
FFT本地运行正确,提交WA,求助
400333
qzilr楼主2022/8/25 21:01

RT

#include<iostream>
#include<cmath>
using namespace std;
const int N=4e6+6;
const double Pi=acos(-1.0);
struct complex{
	double x,y;
	complex(double _x=0,double _y=0){x=_x,y=_y;}
}a[N],b[N];
complex operator +(complex a,complex o){return complex(a.x+o.x,a.y+o.y);}
complex operator -(complex a,complex o){return complex(a.x-o.x,a.y-o.y);}
complex operator *(complex a,complex o){return complex(a.x*o.x-a.y*o.y,a.x*o.y+a.y*o.x);}
void FFT(int limit,complex *a,int type){
	if(limit==1)	return;
	complex a1[limit>>1],a2[limit>>1];
	for(int i=0;i<=limit;i+=2)
		a1[i>>1]=a[i],a2[i>>1]=a[i+1];
	FFT(limit>>1,a1,type),FFT(limit>>1,a2,type);
	complex Wn=complex(cos(2.0*Pi/limit),type*sin(2.0*Pi/limit)),w=complex(1,0);
	for(int i=0;i<(limit>>1);i++,w=w*Wn)
		a[i]=a1[i]+w*a2[i],a[i+(limit>>1)]=a1[i]-w*a2[i];
}
int main(){
	int n,m;cin>>n>>m;
	for(int i=0;i<=n;i++)	cin>>a[i].x;
	for(int i=0;i<=m;i++)	cin>>b[i].x;
	int limit=1;while(limit<=n+m)	limit<<=1;
	FFT(limit,a,1),FFT(limit,b,1);
	for(int i=0;i<=limit;i++)	a[i]=a[i]*b[i];
	FFT(limit,a,-1);
	for(int i=0;i<=n+m;i++)	cout<<(int)(a[i].x/limit+0.5)<<" ";
	return 0;
}
2022/8/25 21:01
加载中...