题目链接

\(Description\)

求$$\sum_{i=0}n\sum_{j=0}iS(i,j)\times 2^j\times j!\mod 998244353$$

其中\(S(i,j)\)为第二类斯特林数(\(S(n,m)\)即在\(m\)个无区别盒子中放\(n\)个不同小球的方案数)。

\(Solution\)





(不知博客园markdowm怎么回事就是显示格式错误)

另:第二类斯特林数 总结

//7988kb	2340ms
#include <cstdio>
#include <algorithm>
#define mod 998244353
#define G 3
#define invG 332748118
#define Mod(x) x>=mod&&(x-=mod)
typedef long long LL;
const int N=(1<<18)+5; int pw[N],fac[N],ifac[N],inv[N],rev[N],f[N],g[N]; inline int FP(int x,int k)
{
int t=1;
for(; k; k>>=1,x=1ll*x*x%mod)
if(k&1) t=1ll*t*x%mod;
return t;
}
void NTT(int *a,int lim,int type)
{
for(int i=1; i<lim; ++i) if(i<rev[i]) std::swap(a[i],a[rev[i]]);
for(int i=2; i<=lim; i<<=1)
{
int mid=i>>1;
int Wn=FP(~type?G:invG,(mod-1)/i);
for(int j=0; j<lim; j+=i)
{
int w=1,t;
for(int k=0; k<mid; ++k,w=1ll*w*Wn%mod)
a[j+k+mid]=(a[j+k]-(t=1ll*a[j+k+mid]*w%mod)+mod), Mod(a[j+k+mid]),
a[j+k]+=t, Mod(a[j+k]);
}
}
if(type==-1) for(int i=0,inv=FP(lim,mod-2); i<lim; ++i) a[i]=1ll*a[i]*inv%mod;
} int main()
{
int n; scanf("%d",&n); pw[0]=fac[0]=1;
for(int i=1; i<=n; ++i)
pw[i]=pw[i-1]<<1, Mod(pw[i]), fac[i]=1ll*fac[i-1]*i%mod; ifac[n]=FP(fac[n],mod-2);
for(int i=n-1; ~i; --i) ifac[i]=1ll*ifac[i+1]*(i+1)%mod; inv[1]=1;
for(int i=2; i<=n; ++i) inv[i]=1ll*(mod-mod/i)*inv[mod%i]%mod; f[0]=g[0]=1, f[1]=mod-1/*not -1==*/, g[1]=n+1;
for(int i=2; i<=n; ++i)
f[i]=i&1?(mod-ifac[i]):ifac[i],
g[i]=1ll*(FP(i,n+1)-1)*inv[i-1]%mod*ifac[i]%mod;//FP(..,..)!=0 int len=-1,lim=1; while(lim<=n<<1) lim<<=1,++len;
for(int i=1; i<lim; ++i) rev[i]=(rev[i>>1]>>1)|((i&1)<<len);
NTT(f,lim,1), NTT(g,lim,1);
for(int i=0; i<lim; ++i) f[i]=1ll*f[i]*g[i]%mod;
NTT(f,lim,-1); LL ans=0;
for(int i=0; i<=n; ++i) ans+=1ll*pw[i]*fac[i]%mod*f[i]%mod;
printf("%lld\n",ans%mod); return 0;
}
自留
### $Description$
求$$\sum_{i=0}^n\sum_{j=0}^iS(i,j)\times 2^j\times j!\mod 998244353$$ 其中$S(i,j)$为第二类斯特林数($S(n,m)$即在$m$个无区别盒子中放$n$个不同小球的方案数)。
### $Solution$
注意到$i<j$时,$S(i,j)=0$,所以$j$的上界可以到$n$。
$$\begin{aligned}\sum_{i=0}^n\sum_{j=0}^iS(i,j)\times 2^j\times j!&=\sum_{i=0}^n\sum_{j=0}^nS(i,j)\times 2^j\times j!\\&=\sum_{j=0}^n2^j\cdot j!\cdot\sum_{i=0}^nS(i,j)\tag !\end{aligned}$$ $S(n,m)$的一个公式为$$S(n,m)=\frac{1}{m!}\sum_{k=0}^m(-1)^kC(m,k)(m-k)^n$$ 即利用容斥,枚举强制为空的盒子有多少个(空盒子至少有多少个)。因为盒子无序所以再除以$m!$。然后可以化简。$$\begin{aligned}S(n,m)&=\frac{1}{m!}\sum_{k=0}^m(-1)^kC(m,k)(m-k)^n\\&=\sum_{k=0}^m(-1)^k\frac{1}{k!(m-k)!}(m-k)^n\\&=\sum_{k=1}^m\frac{(-1)^k}{k!}\cdot\frac{(m-k)^n}{(m-k)!}\end{aligned}$$ 注意到这是个卷积形式,所以我们可以$O(n\log n)$计算出$S(n,i)$。
当然本题还是把上式代回去。$$\begin{aligned}\sum_{j=0}^n2^j\cdot j!\cdot\sum_{i=0}^nS(i,j)&=\sum_{j=0}^n2^j\cdot j!\cdot\sum_{i=0}^n\sum_{k=0}^j\frac{(-1)^k}{k!}\cdot\frac{(j-k)^i}{(j-k)!}\\&=\sum_{j=0}^n2^j\cdot j!\cdot\sum_{k=0}^j\frac{(-1)^k}{k!}\cdot\frac{\sum_{i=0}^n(j-k)^i}{(j-k)!}\tag !\end{aligned}$$ 注意到后面还是个卷积形式,令$f(x)=\frac{(-1)^x}{x!},g(x)=\frac{\sum_{i=0}^nx^i}{x!}$。
设$S_n=\sum_{i=0}^nx^i$,则$xS_n=\sum_{i=1}^{n+1}x^i$,得$S_n=\frac{x^{n+1}-1}{x-1}$,即$g(x)=\frac{x^{n+1}-1}{(x-1)x!}\tag !$。特殊的,令$g(0)=1,g(1)=n+1$。
这样$f,g$都可以递推。
然后$$Ans=\sum_{j=0}^n2^j\cdot j!\cdot(f*g)(j)$$ NTT就行了。

BZOJ.4555.[HEOI2016&TJOI2016]求和(NTT 斯特林数)的更多相关文章

  1. P4091-[HEOI2016/TJOI2016]求和【斯特林数,NTT】

    正题 题目链接:https://www.luogu.com.cn/problem/P4091 题目大意 给出\(n\),求 \[\sum_{i=0}^n\sum_{j=0}^i\begin{Bmatr ...

  2. [HEOI2016/TJOI2016]求和(第二类斯特林数)

    题目 [HEOI2016/TJOI2016]求和 关于斯特林数与反演的更多姿势\(\Longrightarrow\)点这里 做法 \[\begin{aligned}\\ Ans&=\sum\l ...

  3. 洛谷 P4091 [HEOI2016/TJOI2016]求和 解题报告

    P4091 [HEOI2016/TJOI2016]求和 题目描述 在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心. 现在他想计算这样一个函数的值: \[ f(n)=\sum_{i=0}^n\ ...

  4. 【LG4091】[HEOI2016/TJOI2016]求和

    [LG4091][HEOI2016/TJOI2016]求和 题面 要你求: \[ \sum_{i=0}^n\sum_{j=0}^iS(i,j)*2^j*j! \] 其中\(S\)表示第二类斯特林数,\ ...

  5. 【题解】P4091 [HEOI2016/TJOI2016]求和

    [题解]P4091 [HEOI2016/TJOI2016]求和 [P4091 HEOI2016/TJOI2016]求和 可以知道\(i,j\)从\(0\)开始是可以的,因为这个时候等于\(0\).这种 ...

  6. loj2058 「TJOI / HEOI2016」求和 NTT

    loj2058 「TJOI / HEOI2016」求和 NTT 链接 loj 思路 \[S(i,j)=\frac{1}{j!}\sum\limits_{k=0}^{j}(-1)^{k}C_{j}^{k ...

  7. BZOJ 4556 [HEOI2016/TJOI2016]字符串

    BZOJ 4556 [HEOI2016/TJOI2016]字符串 其实题解更多是用后缀数组+数据结构的做法,貌似也不好写. 反正才学了 sam 貌似比较简单的做法. 还是得先二分,然后倍增跳到 $ s ...

  8. 【BZOJ 4555】[Tjoi2016&Heoi2016]求和 多项式求逆/NTT+第二类斯特林数

    出处0.0用到第二类斯特林数的性质,做法好像很多,我打的是直接ntt,由第二类斯特林数的容斥公式可以推出,我们可以对于每一个i,来一次ntt求出他与所有j组成的第二类斯特林数的值,这个时候我们是O(n ...

  9. P4091 [HEOI2016/TJOI2016]求和(第二类斯特林数+NTT)

    传送门 首先,因为在\(j>i\)的时候有\(S(i,j)=0\),所以原式可以写成\[Ans=\sum_{i=0}^n\sum_{j=0}^nS(i,j)\times 2^j\times j! ...

随机推荐

  1. RNN(2) ------ “《A Critical Review of Recurrent Neural Networks for Sequence Learning》RNN综述性论文讲解”(转载)

    原文链接:http://blog.csdn.net/xizero00/article/details/51225065 一.论文所解决的问题 现有的关于RNN这一类网络的综述太少了,并且论文之间的符号 ...

  2. centos6.7环境下kvm虚拟机之virt-install和virsh及virt-manager工具的使用

    virt-install工具的使用: virt-install是一个命令行工具,它能够为KVM.Xen或其它支持libvrit API的hypervisor创建虚拟机并完成GuestOS安装:此外,它 ...

  3. 脚本检测CDN节点资源是否与源站资源一致

    需求: 1.所有要检测的资源url放到一个单独文件中 2.检测cdn节点资源大小与源站文件大小是否一致 3.随机抽查几个资源,检查md5sum是否一致 4.使用多线程,可配置线程数 代码目录: hex ...

  4. python文件、文件夹操作OS模块

    转自:python文件.文件夹操作OS模块   '''一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法.1.得到当前工作目录,即当前Python脚本工作的目录路径: ...

  5. PYTHON-模块 sys os random shutil

    import sys # 环境变量# print(sys.path)# # 查看已经加载的模块# print(sys.modules)# # 获取终端调用时的参数# print(sys.argv)# ...

  6. windows下sublime通过sftp扩展上传文件到linux服务器上

    首先在package controll下载sftp扩展,在任意磁盘下新建文件夹: 然后,添加该文件夹到sublime中,并在xhell中链接linux服务器,新建目录,mkdir  /home/hel ...

  7. Python实现进度条功能

    Python实现进度条功能 import sys, time def progress(percent, width=50): # 设置进度条的宽度 if percent >= 100: # 当 ...

  8. hdu 4549 M斐波拉契 (矩阵快速幂 + 费马小定理)

    Problem DescriptionM斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = aF[1] = bF[n] = F[n-1] * F[n-2] ( n > 1 ) 现在 ...

  9. otter部署【原创】

    环境IP:10.10.6.171 部署:mysql源库IP:10.10.6.172 部署:mysql目标库IP:10.10.6.173 部署:zookeeper,manager,node,canal ...

  10. 解决asp.net 报错 无法获取所需的权限错误

    asp.net 报错 无法获取所需的权限 无法获取所需的权限.说明: 执行当前 Web 请求期间,出现未处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 无法获取所 ...