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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

FFTFNT模板

發(fā)布時間:2023/12/20 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 FFTFNT模板 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

UOJ 34
終于把板子更新到正常的版本了。

FFT :

#include <bits/stdc++.h> using namespace std; const double pi=acos(-1.0); typedef complex<double>E; int n,m,x,L,mn; int R[1<<18]; E a[1<<18],b[1<<18]; int c[1<<18]; void fft(E a[],int op){for(int i=0;i<n;i++)if(i<R[i])swap(a[i],a[R[i]]);for(int i=1;i<n;i<<=1){E wn(cos(pi/i),op*sin(pi/i));for(int j=0;j<n;j+=(i<<1)){E w(1,0);for(int k=0;k<i;k++,w*=wn){E x=a[j+k],y=w*a[j+k+i];a[j+k]=x+y;a[j+k+i]=x-y;}}}if(op==-1)for(int i=0;i<n;i++)a[i]/=n; } int main(){scanf("%d%d",&n,&m);for(int i=0;i<=n;i++){scanf("%d",&x);a[i]=E(x,0);}for(int i=0;i<=m;i++){scanf("%d",&x);b[i]=E(x,0);}mn=n=n+m+1;while(n!=(n&-n))n+=n&-n;L=31-__builtin_clz(n);for(int i=0;i<n;i++)R[i]=(R[i>>1]>>1)|((i&1)<<(L-1));fft(a,1);fft(b,1);for(int i=0;i<n;i++)a[i]*=b[i];fft(a,-1);for(int i=0;i<n;i++)c[i]=(int)(a[i].real()+0.5);for(int i=0;i<mn;i++)printf("%d%c",c[i],i==mn-1?'\n':' '); }

FNT :

#include <bits/stdc++.h> using namespace std; typedef long long ll; const long long mod=998244353; ll power(ll n,ll p){ll ans=1;ll base=n;while(p){if(p&1)ans=ans*base%mod;p>>=1;base=base*base%mod;}return ans; } int n,m,x,L,mn; int R[1<<18]; ll a[1<<18],b[1<<18]; int c[1<<18]; void fnt(ll a[],int op){for(int i=0;i<n;i++)if(i<R[i])swap(a[i],a[R[i]]);for(int i=1;i<n;i<<=1){ll wn=power(3,(mod-1)/(i<<1));if(op<0)wn=power(wn,mod-2);for(int j=0;j<n;j+=(i<<1)){ll w=1;for(int k=0;k<i;k++,w=w*wn%mod){ll x=a[j+k],y=w*a[j+k+i]%mod;a[j+k]=(x+y)%mod;a[j+k+i]=(x-y+mod)%mod;}}}if(op==-1){ll inv=power(n,mod-2);for(int i=0;i<n;i++){a[i]=a[i]*inv%mod;}} } int main(){scanf("%d%d",&n,&m);for(int i=0;i<=n;i++){scanf("%lld",&a[i]);}for(int i=0;i<=m;i++){scanf("%lld",&b[i]);}mn=n=n+m+1;while(n!=(n&-n))n+=n&-n;L=31-__builtin_clz(n);for(int i=0;i<n;i++)R[i]=(R[i>>1]>>1)|((i&1)<<(L-1));fnt(a,1);fnt(b,1);for(int i=0;i<n;i++)a[i]=a[i]*b[i]%mod;fnt(a,-1);for(int i=0;i<mn;i++)printf("%lld%c",a[i],i==mn-1?'\n':' '); }

總結(jié)

以上是生活随笔為你收集整理的FFTFNT模板的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。