本地测数据能过#1,ide上全输出0?
查看原帖
本地测数据能过#1,ide上全输出0?
88686
Shirο楼主2020/11/30 22:19
#include<bits/stdc++.h>
using namespace std;
const int maxn=5e6+5;
const double pi=acos(-1.0);
struct Complex
{
	double x,y;
	Complex(double xx=0,double yy=0){x=xx,y=yy;};
}a[maxn],b[maxn];
Complex operator +(Complex a,Complex b){return Complex(a.x+b.x,a.y+b.y);}
Complex operator -(Complex a,Complex b){return Complex(a.x-b.x,a.y-b.y);}
Complex operator *(Complex a,Complex b){return Complex(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.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()
{
	//freopen("out.txt","w",stdout);
	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<<a[i].x<<' '<<limit<<endl,printf("%d ",(int)(a[i].x/limit+0.5));
}
2020/11/30 22:19
加载中...