日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【推导】【NTT】hdu6061 RXD and functions(NTT)

發布時間:2025/3/18 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【推导】【NTT】hdu6061 RXD and functions(NTT) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題意:給定一個n次多項式f(x)的各項系數,讓你求f(x-Σai)的各項系數。

http://blog.csdn.net/v5zsq/article/details/76780053

推導才是最關鍵的部分……我的數學推導能力很弱,比賽的時候很難推出來……尤其是累加變量交換順序、換元這兩個常用的技巧在配湊卷積形式以及莫比烏斯反演中都很常用

#include<cstdio> #include<cstring> #include<algorithm> using namespace std; typedef long long ll; #define N ((1<<18)+5) #define MOD 998244353ll ll Quick_Pow(ll a,ll p){if(p==0){return 1ll;}ll res=Quick_Pow(a,p>>1);res=res*res%MOD;if((p&1ll)==1ll){res=(a%MOD*res)%MOD;}return res; } struct NTT{int n,rev[N];ll g;void ini(int lim) {g=3;//1004535809,998244353的原根都是3n=1;int k=0;while(n<lim){n<<=1;++k;}for(int i=0;i<n;++i){rev[i]=((rev[i>>1]>>1)|((i&1)<<(k-1)));}}void dft(ll a[],int DFT) {for(int i=0;i<n;++i){if(i<rev[i]){swap(a[i],a[rev[i]]);}}for(int l=2;l<=n;l<<=1){int m=l>>1;ll wn=Quick_Pow(g,DFT==1 ? (MOD-1ll)/(ll)l : MOD-1ll-(MOD-1ll)/(ll)l);for(int i=0;i<n;i+=l){ll w=1;for(int k=0;k<m;++k){ll t=w*a[i+k+m]%MOD;a[i+k+m]=(a[i+k]-t+MOD)%MOD;a[i+k]=(a[i+k]+t)%MOD;w=w*wn%MOD;}}}if(DFT==-1){ll inv=Quick_Pow(n,MOD-2ll);for(int i=0;i<n;++i){a[i]=a[i]*inv%MOD;}}}void mul(ll a[],ll b[],int len) {ini(len);dft(a,1);dft(b,1);for(int i=0;i<n;++i){a[i]=a[i]*b[i];}dft(a,-1);} }ntt; ll c[N],A[N],B[N],jc[N],jcni[N]; int n,m; int main(){jc[0]=1;jcni[0]=1;for(int i=1;i<=100000;++i){jc[i]=(jc[i-1]*(ll)i)%MOD;jcni[i]=Quick_Pow(jc[i],MOD-2ll);}ll x; // freopen("hdu6061.in","r",stdin);while(scanf("%d",&n)!=EOF){memset(A,0,sizeof(A));memset(B,0,sizeof(B));for(int i=0;i<=n;++i){scanf("%lld",&c[i]);}ll a=0;scanf("%d",&m);for(int i=1;i<=m;++i){scanf("%lld",&x);a=(a+x)%MOD;}ll pw=1;for(int i=0;i<=n;++i){A[i]=(c[n-i]*jc[n-i])%MOD;B[i]=(pw*jcni[i])%MOD;pw=(pw*(MOD-a))%MOD;}ntt.mul(A,B,n*2+1);for(int i=0;i<=n;++i){printf("%lld ",(A[n-i]*jcni[i])%MOD);}puts("");}return 0; }

轉載于:https://www.cnblogs.com/autsky-jadek/p/7546037.html

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的【推导】【NTT】hdu6061 RXD and functions(NTT)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。