提交记录 28019


用户 题目 状态 得分 用时 内存 语言 代码长度
xujindong 1002. 测测你的多项式乘法 Accepted 100 287.647 ms 32424 KB C++14 1.19 KB
提交时间 评测时间
2025-03-14 15:30:54 2025-03-14 15:30:56
#include<bits/stdc++.h>
using namespace std;
const int mod=998244353;
int f[2097152],g[2097152],h[2097152];
template<typename T>T qpow(T a,T b,T n,T ans=1){
  for(a%=n;b;b>>=1)b&1&&(ans=1ll*ans*a%n),a=1ll*a*a%n;
  return ans;
}
template<typename T>T inv(T a,T b){
  return qpow(a,b-2,b);
}
int add(int x){
  return x>=mod?x-mod:x;
}
int reduce(int x){
  return x<0?x+mod:x;
}
void DIF(int n,int f[]){
  for(int i=n;i>=2;i>>=1){
    int wn=qpow(3,(mod-1)/i,mod);
    for(int j=0;j<n;j+=i)for(int w=1,x,y,k=j;k<j+i/2;k++)x=f[k],y=f[k+i/2],f[k]=add(x+y),f[k+i/2]=1ll*w*reduce(x-y)%mod,w=1ll*w*wn%mod;
  }
}
void DIT(int n,int f[]){
  for(int i=2;i<=n;i<<=1){
    int wn=qpow(3,(mod-1)/i,mod);
    for(int j=0;j<n;j+=i)for(int k=j,w=1,x,y;k<j+i/2;k++)x=f[k],y=1ll*w*f[k+i/2]%mod,f[k]=add(x+y),f[k+i/2]=reduce(x-y),w=1ll*w*wn%mod;
  }
  reverse(f+1,f+n);
  for(int i=0,invn=inv(n,mod);i<n;i++)f[i]=1ll*f[i]*invn%mod;
}
void poly_multiply(unsigned a[],int n,unsigned b[],int m,unsigned c[]){
  for(int i=0;i<=n;i++)f[i]=a[i];
  for(int i=0;i<=m;i++)g[i]=b[i];
  DIF(2<<__lg(n+m),f),DIF(2<<__lg(n+m),g);
  for(int i=0;i<2<<__lg(n+m);i++)h[i]=1ll*f[i]*g[i]%mod;
  DIT(2<<__lg(n+m),h);
  for(int i=0;i<=n+m;i++)c[i]=h[i];
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #1287.647 ms31 MB + 680 KBAcceptedScore: 100


Judge Duck Online | 评测鸭在线
Server Time: 2025-04-02 21:39:41 | Loaded in 0 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠