样例过了,但是0分
查看原帖
样例过了,但是0分
376679
初星逝者楼主2024/6/15 14:25

rt

#include <bits/stdc++.h>
using namespace std;

int n,m;
struct Node{
	double x,y;
	Node(double xx=0,double yy=0){x=xx,y=yy;}
}a[3000005],b[3000005];
double pi=acos(-1);
Node operator-(Node a,Node b){return Node(a.x-b.x,a.y-b.y);}
Node operator+(Node a,Node b){return Node(a.x+b.x,a.y+b.y);}
Node operator*(Node a,Node b){return Node(a.x*b.x-a.y*b.y,a.x*b.y+a.y*b.x);}

void FFT(int len,Node *a,double op){
	if(len==1)return ;
	Node a1[len>>1],a2[len>>1];
	for(int i=0;i<=len;i+=2)a1[i>>1]=a[i],a2[i>>1]=a[i+1];
	FFT(len>>1,a1,op);FFT(len>>1,a2,op);
	Node w=Node(1,0),Wn=Node(cos(2.0*pi/len),op*sin(2.0*pi/len));
	for(int i=0;i<(len>>1);i++,w=w*Wn){
		a[i]=a1[i]+w*a2[i];
		a[i+(len>>1)]=a1[i]-w*a2[i];
	} 
}

int main(){
	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 len=1;
	while(len<=n+m)len<<=1;
	FFT(len,a,1.0);FFT(len,b,1.0);
	for(int i=0;i<=len;i++)a[i]=a[i]*b[i];
	FFT(len,a,-1.0);
	for(int i=0;i<=n+m;i++){
		printf("%d ",(int)(a[i].x/len+0.5));
	}
	return 0;
} 
2024/6/15 14:25
加载中...