#include<bits/stdc++.h>
using namespace std;
namespace Acc{
#define BUFSIZE 20000000
#define ll long long
#define ull unsigned long long
#define clr(f,n) memset(f,0,sizeof(int)*n)
#define cpy(f,g,n) memcpy(f,g,sizeof(int)*n)
struct read{
#define gc() (p1==p2&&(p2=buf+fread(p1=buf,1,BUFSIZE,stdin),p1==p2)?EOF:*p1++)
read():p1(buf),p2(buf){}
char buf[BUFSIZE],*p1,*p2,c;
inline read&operator>>(int&x){
int f=0;
for(c=gc(),x=0;c!=EOF&&!isdigit(c);c=gc())if(c=='-')f=1;
for(;isdigit(c);c=gc())x=(x<<3)+(x<<1)+(c^48);
x=f?-x:x;
return *this;
}
}in;
void opt(int*a,int n){
for(int i=0;i<n;i++)cout<<a[i]<<' ';
puts("\n");
}
const int _g=3,_ig=332748118,mod=998244353,N=1e6+10;
int qpow(int a,int b=mod-2){
int r=1;for(;b;b>>=1,a=1ll*a*a%mod)if(b&1)r=1ll*r*a%mod;return r;
}
int rn=-1,rev[N<<1];
void rpre(int n){
if(rn==n)return;rn=n;
for(int i=0;i<n;i++)rev[i]=(rev[i>>1]>>1)|((i&1)?n>>1:0);
}
void px(int*f,int*g,int n){for(int i=0;i<n;i++)f[i]=1ll*f[i]*g[i]%mod;}
void invp(int*f,int n){
}
void NTT(int*g,int inv,int n){
rpre(n);
static ull f[N<<1],w[N<<1];w[0]=1;
for(int i=0;i<n;i++)f[i]=(((ll)mod<<5)+g[rev[i]])%mod;
for(int l=1;l<n;l<<=1){
ull tmp=qpow(inv?_g:_ig,(mod-1)/(l<<1));
for(int i=1;i<l;i++)w[i]=w[i-1]*tmp%mod;
for(int i=0;i<n;i+=(l<<1))
for(int j=0;j<l;j++){
int tt=w[j]*f[l|i|j]%mod;
f[l|i|j]=f[i|j]+mod-tt;
f[i|j]+=tt;
}
if(l==(1<<10))for(int i=0;i<n;i++)f[i]%=mod;
}
if(!inv){
ull invn=qpow(n);
for(int i=0;i<n;++i)g[i]=f[i]%mod*invn%mod;
}else for(int i=0;i<n;i++)g[i]=f[i]%mod;
}
void times(int*f,int*g,int len,int lim){
static int sav[N<<1];
int n=1;for(;n<len+len;n<<=1);
clr(sav,n),cpy(sav,g,n);
NTT(f,1,n),NTT(g,1,n),px(f,g,n),NTT(f,0,n);
clr(f+lim,n-lim),clr(sav,n);
}
int n,m,F[N<<1],G[N<<1];
void work(){
in>>n>>m;
for(int i=0;i<=n;i++)in>>F[i];
for(int i=0;i<=m;i++)in>>G[i];
for(m+=n,n=1;n<=m;n<<=1);
times(F,G,m,n);
for(int i=0;i<=m;i++)cout<<F[i]<<' ';
}
}
int main(){
return Acc::work(),0;
}
/*
void invp(int *f,int m)
{
int n;for (n=1;n<m;n<<=1);
static int w[Maxn<<1],r[Maxn<<1],sav[Maxn<<1];
w[0]=powM(f[0]);
for (int len=2;len<=n;len<<=1){
for (int i=0;i<(len>>1);i++)
r[i]=(w[i]<<1)%mod;
cpy(sav,f,len);
NTT(w,1,len<<1);px(w,w,len<<1);
NTT(sav,1,len<<1);px(w,sav,len<<1);
NTT(w,0,len<<1);clr(w+len,len);
for (int i=0;i<len;i++)
w[i]=(r[i]-w[i]+mod)%mod;
}cpy(f,w,m);clr(sav,n+n);clr(w,n+n);clr(r,n+n);
}
int n,F[Maxn<<1];
int main()
{
n=read();
for (int i=0;i<n;i++)F[i]=read();
invp(F,n);print(F,n);
return 0;
}
*/
| Compilation | N/A | N/A | Compile OK | Score: N/A | 显示更多 |
| Subtask #1 Testcase #1 | 37.49 us | 64 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #2 | 69.582 ms | 16 MB + 628 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #3 | 30.62 ms | 7 MB + 924 KB | Accepted | Score: 100 | 显示更多 |
| Subtask #1 Testcase #4 | 30.542 ms | 7 MB + 912 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #5 | 39.55 us | 64 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #6 | 37.65 us | 64 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #7 | 38.91 us | 64 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #8 | 66.116 ms | 16 MB + 292 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #9 | 66.047 ms | 16 MB + 292 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #10 | 34.953 ms | 8 MB + 980 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #11 | 69.862 ms | 16 MB + 708 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #12 | 66.433 ms | 15 MB + 588 KB | Accepted | Score: 0 | 显示更多 |
| Subtask #1 Testcase #13 | 36.43 us | 64 KB | Accepted | Score: 0 | 显示更多 |