2017 3 11 分治FFT
2017-03-13 19:53
344 查看
考试一道题的递推式为$$f[i]=\sum_{j=1}^{i} j^k \times (i-1)! \times \frac{f[i-j]}{(i-j)!}$$
这显然是一个卷积的形式,但$f$需要由自己卷过来(我也不知到怎么说),以前只会生成函数的做法,但这题好像做不了(谁教教我怎么做),于是无奈的写了一发暴力,看题解发现是分治FFT.
分治每层用$f[l]-f[mid]$与$a[1]-a[r-l]$做NTT。
这样显然每个$f[l]-f[mid]$对$f[mid+1]-f[r]$的贡献都考虑到了。
因为分治是从1开始的,所以$f[0]$的转移预处理了。
#include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #define ll long long #define N 400005 using namespace std; int n,k; const int p = 998244353; ll poow ,jie ,ni ; ll pw(ll x,ll y) { ll lst=1; while(y) { if(y&1)lst=lst*x%p; x=x*x%p; y>>=1; } return lst; } ll f ; int R ,a ,b ; void NTT(int *a,int n,int f,int L) { for(int i=0;i<n;i++)R[i]=(R[i>>1]>>1)|((i&1)<<(L-1)); 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) { int wn=pw(3,((p-1)/(i<<1)*f+p-1)%(p-1)); for(int j=0;j<n;j+=(i<<1)) { int w=1; for(int k=0;k<i;k++,w=1LL*w*wn%p) { int x=a[j+k],y=1LL*a[j+k+i]*w%p; a[j+k]=(x+y)%p;a[j+k+i]=(x-y+p)%p; } } } if(f==-1) { int nw=pw(n,p-2); for(int i=0;i<n;i++)a[i]=1LL*a[i]*nw%p; } return ; } void solve(int l,int r) { if(l==r) { f[l]=f[l]*jie[l-1]%p; return ; } int mid=(l+r)>>1; solve(l,mid);int len=r-l+1;int m=len<<1; for(int i=1;i<len;i++)a[i]=poow[i]; for(int i=l;i<=mid;i++)b[i-l]=f[i]*ni[i]%p; int L=0;for(len=1;len<m;len<<=1)L++; for(int i=mid-l+1;i<len;i++)b[i]=0; NTT(a,len,1,L);NTT(b,len,1,L); for(int i=0;i<len;i++)a[i]=1LL*a[i]*b[i]%p; NTT(a,len,-1,L); for(int i=mid+1;i<=r;i++)f[i]=(f[i]+a[i-l])%p; solve(mid+1,r); } int main() { scanf("%d%d",&n,&k); jie[0]=1;ni[0]=1; for(int i=1;i<=n;i++)jie[i]=(jie[i-1]*i)%p; for(int i=1;i<=n;i++)ni[i]=pw(jie[i],p-2); poow[0]=1; for(int i=1;i<=n;i++)poow[i]=pw(i,k); for(int i=1;i<=n;i++)f[i]=poow[i]; solve(1,n); printf("%lld\n",f ); return 0; }
相关文章推荐
- MIP 问题解决方案大全(2017-11更新)
- BZOJ3456【分治FFT】
- 2017-11-06 ~ 2017 11-10 八连测酱油记
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 xor (根号分治)
- 2017北理校赛G题 人民的名义(FFT)
- 2017_11_28 mybatis多参数传入,以及#,$的区别
- HDU 5730: Shell Necklace 分治FFT
- 【XSY1332】【BZOJ3456】轩辕朗的城市规划 无向连通图计数 CDQ分治 FFT 多项式求逆 多项式ln
- kali 2017 vmware11复制粘贴功能--open-vm-tools.servic
- Radix-2 分治FFT
- 2017 Multi-University Training Contest 2 solutions BY (4/11)
- 2017 ACM/ICPC Asia Regional Shenyang Online总结 5/11
- HDU5730 Shell Necklace(DP + CDQ分治 + FFT)
- 2017-11-17A星:动态更新寻路图
- hdu 6088 Rikka with Rock-paper-scissors (2017 多校第五场 1004) 【组合数学 + 数论 + 模意义下的FFT】
- 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 A Tree 树分治 矩阵 没有逆元和交换律的树链统计
- 4827: [Hnoi2017]礼物 fft
- [BZOJ4911][SDOI2017]切树游戏-链分治-快速沃尔什变换
- 【点分治】【FFT】CDOJ1562 Amaz1ng Prime
- 【bzoj5206】[Jsoi2017]原力 根号分治+STL-map