这个题 TLE 了后面 5,求调。
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=4e5+10,mod=998244353;
int n,n2,a[N],b[N],tr[N],t1[N],t2[N],t3[N];
int qpow(int x,int y)
{
int ret=1;
while(y)
{
if(y&1)
{
ret=ret*x%mod;
}
x=x*x%mod;
y/=2;
}
return ret;
}
void ntt(int *ar,int len,int fl)
{
int g=3,invg;
invg=qpow(g,mod-2);
for(int i=0;i<len;i++)
{
if(tr[i]>i)
{
swap(ar[i],ar[tr[i]]);
}
}
for(int l=2;l<=len;l*=2)
{
int mid=l/2,W=qpow((fl==1? g:invg),(mod-1)/l),w=1;
for(int i=0;i+l<=len;i+=l)
{
for(int j=i,w0=w;j<i+mid;j++,w0=w0*W%mod)
{
int x=ar[j],y=w0*ar[j+mid]%mod;
ar[j]=(x+y);ar[j+mid]=(x-y+mod);
if(ar[j]>mod)
{
ar[j]-=mod;
}
if(ar[j+mid]>mod)
{
ar[j+mid]-=mod;
}
}
}
}
}
void mul(int *x,int *y)
{
for(int i=0;i<n;i++)
{
t1[i]=x[i];t2[i]=y[i];
}
ntt(t1,n,1);
ntt(t2,n,1);
for(int i=0;i<n;i++)
{
t1[i]=t1[i]*t2[i]%mod;
}
ntt(t1,n,-1);
for(int i=0;i<n;i++)
{
x[i]=t1[i]*qpow(n,mod-2)%mod;
}
}
void getinv()
{
b[0]=qpow(a[0],mod-2);
for(int i=2;i<=n;i*=2)
{
for(int j=0;j<i/2;j++)
{
t3[j]=b[j]*2;
if(t3[j]>mod)
{
t3[j]-=mod;
}
}
mul(b,b);
mul(b,a);
for(int j=0;j<i/2;j++)
{
b[j]=t3[j]-b[j]+mod;
if(b[j]>mod)
{
b[j]-=mod;
}
}
for(int j=i/2;j<n;j++)
{
b[j]=0;
}
}
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int x;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
n2=n*2;n=1;x=0;
while(n<=n2)
{
n*=2;
x++;
}
n2/=2;
for(int i=1;i<n;i++)
{
tr[i]=(tr[i>>1]>>1)|((i&1)<<(x-1));
}
getinv();
for(int i=0;i<n2;i++)
{
cout<<b[i]<<" ";
}
}