提交记录 522


用户 题目 状态 得分 用时 内存 语言 代码长度
dDuck 1002. 测测你的多项式乘法 Compile Error 0 0 ns 0 KB C 1.40 KB
提交时间 评测时间
2018-06-20 14:25:04 2020-07-31 20:39:48
#include<math.h>
#define MAXN 2400005 
#define tpi acos(-1.0)
struct Complex
{
    double x;
    double y;
    Complex(double tX=0,double tY=0){x=tX,y=tY;}
}A[MAXN],B[MAXN];
int Rev[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);}
int Limit=1,Siz=0;
void DFT(Complex*List,int Mode)
{
    for(int i=0;i<Limit;++i) if(i<Rev[i])
	{
		Complex t;
		t=List[Rev[i]];
		List[Rev[i]]=List[i];
		List[i]=t;
	}
    for(int Mid=1;Mid<Limit;Mid<<=1)
    {
        Complex Wn(cos(tpi/Mid),Mode*sin(tpi/Mid));
        for(int Len=Mid<<1,Pos=0;Pos<Limit;Pos+=Len)
        {
            Complex Base(1,0);
            for(int Sub=0;Sub<Mid;++Sub,Base=Base*Wn)
            {
                Complex X=List[Pos+Sub],Y=Base*List[Pos+Mid+Sub];
                List[Pos+Sub]=X+Y;
                List[Pos+Mid+Sub]=X-Y;
            }
        }
    }
}
void poly_multiply(unsigned *a, int N, unsigned *b, int M, unsigned *c)
{
    for(int i=0;i<=N;++i)A[i].x=a[i];
    for(int i=0;i<=M;++i)B[i].x=b[i];
    while(Limit<=N+M) Limit<<=1,++Siz;
    for(int i=0;i<Limit;++i) Rev[i]=(Rev[i>>1]>>1)|((i&1)<<(Siz-1));
    DFT(A,1);
    DFT(B,1);
    for(int i=0;i<=Limit;++i)A[i]=A[i]*B[i];
    DFT(A,-1);
    for(int i=0;i<=N+M;++i)c[i]=(int)(A[i].x/Limit+0.5);
}

CompilationN/AN/ACompile ErrorScore: N/A


Judge Duck Online | 评测鸭在线
Server Time: 2026-04-26 10:29:55 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠