提交记录 2714


用户 题目 状态 得分 用时 内存 语言 代码长度
jjikkollp 1002. 测测你的多项式乘法 Runtime Error 0 125.529 ms 39448 KB C++11 1.38 KB
提交时间 评测时间
2018-06-29 10:54:24 2020-07-31 21:06:02
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>

#define rep(i,l,r) for(int i=(l);i<=(r);++i)
#define rpe(i,r,l) for(int i=(r);i>=(l);--i)

typedef double db;
typedef long long ll;
typedef unsigned long long ull;
typedef unsigned int uint;

const int N=1e6+10;
template <class T>inline void swap(T &a,T &b){T c=a;a=b;b=c;}
namespace FFT{
    const db pi=acos(-1);
    struct cp{
	db re,im;
	cp(db _re=0,db _im=0){re=_re;im=_im;}
	cp operator +(cp b){return cp(re+b.re,im+b.im);}
	cp operator -(cp b){return cp(re-b.re,im-b.im);}
	cp operator *(cp b){return cp(re*b.re-im*b.im,re*b.im+im*b.re);}
    };
    int r[N];cp c[N<<1];
    inline void fft(cp *a,int f,int n){
	rep(i,0,n-1) if(r[i]>i) swap(a[r[i]],a[i]);
	for(int i=1;i<n;i<<=1){
	    cp wn(cos(pi/i),f*sin(pi/i));
	    for(int j=0,p=(i<<1);j<n;j+=p){
		cp w(1,0);
		for(int k=0;k<i;++k,w=w*wn){
		    cp x=a[j+k],y=w*a[j+k+i];
		    a[j+k]=x+y;a[j+k+i]=x-y;
		}
	    }
	}
	if(f==-1){rep(i,0,n-1) a[i].re/=n,a[i].im/=n;}
    }
    inline void mul(int n,int m,uint *a,uint *b,uint *cc){
	n+=m;rep(i,0,n) c[i]=cp(a[i],b[i]);
	int l=0;m=n;for(n=1;n<=m;n<<=1) ++l;
	rep(i,0,n-1) r[i]=(r[i>>1]>>1)|((i&1)<<(l-1));
	rep(i,m+1,n) c[i]=cp(0,0);
	fft(c,1,n);rep(i,0,n-1) c[i]=c[i]*c[i];
	fft(c,-1,n);
	rep(i,0,m) cc[i]=c[i].im/2;
    }
}
void poly_multiply(unsigned *a, int n, unsigned *b, int m, unsigned *c){
    FFT::mul(n,m,a,b,c);
}


CompilationN/AN/ACompile OKScore: N/A

Testcase #1125.529 ms38 MB + 536 KBRuntime ErrorScore: 0


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