[BZOJ4555][Tjoi2016&Heoi2016]求和(FFT)
来源:互联网 发布:linux 分配权限 编辑:程序博客网 时间:2024/06/05 08:31
=== ===
这里放传送门
=== ===
题解
首先值得吐槽的就是这个题如果不知道第二类斯特林数的通项公式的话是很难做的。。想想万一考试的时候遇到这个题然后不知道通项公式两眼抓瞎不是很GG。。而且题目还偏偏给了你递推公式。。明显就是在说【有本事你自己推嘛】之类的嘛。。。= =
然后ATP看到这个题第一反应就是去查了通项公式。。
没错就决定是它了。
题目要求的式子是
第二重枚举的上限跟
然后把通项公式代进去:
显然
然后式子变成了:
那个
这是卷积吗?好像不大是。。最大的不和谐因素就是后面那个
那么我们设
一个卷积就可以搞出来啦!
代码
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const long long Mod=998244353;const long long G=3;int n,L,R[300010],N,M;long long a[300010],b[300010],mul[300010],ans,inv;long long powww(long long a,int t){ long long ans=1;a%=Mod; while (t!=0){ if (t&1) ans=(ans*a)%Mod; a=(a*a)%Mod;t>>=1; } return ans;}void NTT(long long *a,int N,int opt){ long long wn,w,x,y; for (int i=0;i<N;i++) if (i<R[i]) swap(a[i],a[R[i]]); for (int k=1;k<N;k<<=1){ wn=powww(G,(Mod-1)/(k<<1)); for (int p=(k<<1),i=0;i<N;i+=p){ w=1; for (int j=0;j<k;j++){ x=a[i+j];y=a[i+j+k]*w%Mod; a[i+j]=(x+y)%Mod; a[i+j+k]=(x-y+Mod)%Mod; w=(w*wn)%Mod; } } } if (opt==-1) reverse(a+1,a+N);}int main(){ scanf("%d",&n);mul[0]=1; for (int i=1;i<=n;i++) mul[i]=mul[i-1]*i%Mod; M=2*n; for (N=1;N<=M;N<<=1) 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++){ a[i]=powww(mul[i],Mod-2); if (i&1) a[i]=Mod-a[i]; b[i]=(1-powww(i,n+1))%Mod; b[i]=b[i]*powww(1-i,Mod-2)%Mod; b[i]=b[i]*powww(mul[i],Mod-2)%Mod; b[i]=(b[i]+Mod)%Mod; } b[1]=n+1; NTT(a,N,1);NTT(b,N,1); for (int i=0;i<=N;i++) a[i]=(a[i]*b[i])%Mod; NTT(a,N,-1); inv=powww(N,Mod-2)%Mod; for (int i=0;i<=n;i++){ long long tmp=powww(2,i); tmp=tmp*mul[i]%Mod; tmp=tmp*a[i]%Mod*inv%Mod; ans=(ans+tmp)%Mod; } ans=(ans+Mod)%Mod; printf("%I64d\n",ans); return 0;}
0 0
- [BZOJ4555][Tjoi2016&Heoi2016]求和(FFT)
- BZOJ4555: [Tjoi2016&Heoi2016]求和
- bzoj4555【TJOI2016&HEOI2016】求和
- BZOJ4555: [Tjoi2016&Heoi2016]求和
- [BZOJ4555][Tjoi2016&Heoi2016]求和(NTT)
- bzoj4555 [Tjoi2016&Heoi2016]求和(NTT)
- 【XSY2133】【BZOJ4555】【TJOI2016】【HEOI2016】求和 第二类斯特林数 NTT
- [bzoj4555][TJOI&HEOI2016]求和
- 【bzoj4555】[TJOI&HEOI2016]求和
- bzoj 4555: [Tjoi2016&Heoi2016]求和 (NTT)
- Tjoi2016&Heoi2016 求和
- 4555: [Tjoi2016&Heoi2016]求和
- bzoj 4555 [Tjoi2016&Heoi2016]求和
- [第二类斯特林数 组合 分治FFT||多项式求逆] BZOJ 4555 [Tjoi2016&Heoi2016]求和
- bzoj 4555: [Tjoi2016&Heoi2016]求和 NTT
- bzoj 4555:[Tjoi2016&Heoi2016]求和 多项式求逆
- [多项式求逆 模板题] BZOJ 4555 [Tjoi2016&Heoi2016]求和
- 4551: [Tjoi2016&Heoi2016]树
- 电子应用常用英语
- linux配置ssh免秘钥登入
- 【学习python兴趣起源】计算字符串中字母出现的次数
- 欢迎使用CSDN-markdown编辑器
- MySQL二
- [BZOJ4555][Tjoi2016&Heoi2016]求和(FFT)
- RecyclerView使用介绍
- Laravel学习笔记(四)---操作数据库--原生SQL语句
- CAFFE FOR WINDOWS安装与配置
- Ubuntu14.04下安装Composer
- Python基础
- LSB Matching 隐写算法分析与理解
- Qt实现读取显示obj文件——动态绑定纹理与消除纹理
- iOS Develop Learning