debug
查看原帖
debug
1426922
liuxy698楼主2024/12/19 17:24

pts55错了后四个数据点,没debug出来。(其实是因为太繁琐了XD)感谢大佬们的指正

参考了b站董晓算法G41的代码,但是因为没学过c++所以有些处理会不一样

#include <stdio.h>
#include <stdlib.h>
#include <string.h> 
#include <complex.h>
#include <math.h>
#define M_PI 3.14159265358979323846  //这里不这么定义的话,洛谷编译会报错,虽然不是很理解(


void FFT(complex a[],int n,int b)
{
	if (n==1) return;
	int i;	
	complex a1[n/2],a2[n/2];	
	for (i=0;i<n/2;i++){
		a1[i]=a[2*i];
		a2[i]=a[2*i+1];
	}
	FFT(a1,n/2,b);	FFT(a2,n/2,b);
	complex w1=cos(2*M_PI/n)+I*sin(2*M_PI/n)*b;
	complex wk=1;
	for (i=0;i<n/2;i++){
		a[i]=a1[i]+a2[i]*wk;
		a[i+n/2]=a1[i]-a2[i]*wk;
		wk*=w1;				
	} 
}
 
int main()
{ 
	complex a[10000],b[10000];
	int m,n,i;
	
	scanf("%d%d",&n,&m);		
	for (i=0;i<=n;i++) scanf("%lf",&a[i]); 		
	for (i=0;i<=m;i++) scanf("%lf",&b[i]);	
	for (m=m+n,n=1;n<=m;n<<=1);
	
//	printf("%d\n",n);	//测试 
	
	FFT(a,n,1);	FFT(b,n,1);
	for (i=0;i<n;i++) a[i]*=b[i];
	FFT(a,n,-1);					
	
	for (i=0;i<=m;i++) printf("%d ",(int)(creal(a[i])/n+0.5));
	return 0;
}


2024/12/19 17:24
加载中...