提交记录 11354


用户 题目 状态 得分 用时 内存 语言 代码长度
chc_1234567890 1002i. 【模板题】多项式乘法 Compile Error 0 0 ns 0 KB C 1.36 KB
提交时间 评测时间
2019-12-07 11:56:30 2020-08-01 02:42:32
#include<bits/stdc++.h>
using namespace std;
typedef vector<int> poly;
const int maxn=270003;
const double pi=acos(-1);
struct com{
	double r,i;
	com(){}
	com(double _r,double _i):r(_r),i(_i){}
	com operator+(const com &x)const{return com(r+x.r,i+x.i);}
	com operator-(const com &x)const{return com(r-x.r,i-x.i);}
	com operator*(const com &x)const{return com(r*x.r-i*x.i,r*x.i+i*x.r);}
}k1[maxn],k2[maxn];
int r[maxn];
void fft(com a[],int n,int sgn){
	for(int i=0;i<n;i++)if(r[i]>i)swap(a[i],a[r[i]]);
	for(int mid=1;mid<n;mid<<=1){
		com wn(cos(pi/mid),sgn*sin(pi/mid));
		for(int j=0;j<n;j+=(mid<<1)){
			com w(1,0);
			for(int k=0;k<mid;k++,w=w*wn){
				com tmp=w*a[j+k+mid];
				a[j+k+mid]=a[j+k]-tmp;
				a[j+k]=a[j+k]+tmp;
			}
		}
	}
}
poly operator*(const poly &a,const poly &b){
	int n1=a.size()-1,n2=b.size()-1,lg=0,n=1;
	while(n<=n1+n2)lg++,n<<=1;
	for(int i=0;i<n;i++)r[i]=(r[i>>1]>>1)|((i&1)<<(lg-1));
	for(int i=0;i<=n1;i++)k1[i].r=a[i];
	for(int i=0;i<=n2;i++)k2[i].r=b[i];
	fft(k1,n,1);
	fft(k2,n,1);
	for(int i=0;i<n;i++)k1[i]=k1[i]*k2[i];
	fft(k1,n,-1);
	poly ret(n1+n2+1);
	for(int i=0;i<=n1+n2;i++)ret[i]=k1[i].r/n+0.5;
	return ret;
}
int main(){
	int n,m;
	scanf("%d%d",&n,&m);
	poly a(n+1),b(m+1);
	for(int i=0;i<=n;i++)scanf("%d",&a[i]);
	for(int i=0;i<=m;i++)scanf("%d",&b[i]);
	a=a*b;
	a.resize(n+m+1);
	for(int i=0;i<a.size();i++)printf("%d ",a[i]);
	return 0;
}

CompilationN/AN/ACompile ErrorScore: N/A


Judge Duck Online | 评测鸭在线
Server Time: 2026-03-27 22:41:33 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠