【BZOJ4555】【TJOI2016】【HEOI2016】求和 (第二类斯特林数+NTT卷积)
Description
在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心。
现在他想计算这样一个函数的值:
$$f(n)=\sum_{i=0}^n\sum_{j=0}^i S(i,j)\times 2^j\times(j!)$$
$S(i,j)$表示第二类斯特林数,递推公式为:
$S(i,j)=j\times S(i-1,j)+S(i-1,j-1),1\leq j\leq i-1$。
边界条件为:$S(i,i)=1(0\leq i),S(i,0)=0(1\leq i)$
你能帮帮他吗?
Input
Output
输出$f(n)$。
由于结果会很大,输出$f(n)$对$998244353(7×17×223+1)$取模的结果即可。
题解:
递推式给你就是玩你的,一点关系都没有!
第二类斯特林数通项公式:
$$S(i,j)=\frac{1}{j!}\sum_{k=0}^j(-1)^k C_j^k(j-k)^i$$
代入原式得
$$\sum_{i=0}^n\sum_{j=0}^i \frac{1}{j!}\sum_{k=0}^j(-1)^k C_j^k(j-k)^i\times 2^j\times(j!)$$
组合数展开得
$$\sum_{i=0}^n\sum_{j=0}^i 2^j\sum_{k=0}^j(-1)^k\frac{j!}{k!(j-k)!}(j-k)^i$$
交换枚举顺序得
$$\sum_{j=0}^n(j!)2^j\sum_{k=0}^n{(-1)^k\over k!}{1\over (j-k)!}\sum_{i=0}^n(j-k)^i$$
看到又有$k$又有$j-k$,这不是卷积吗?
令 $a(x)=\sum_{x=0}^n{(-1)^x\over x!}$
$b(x)={1\over (x)!}\sum_{i=0}^n(x)^i$
则 $f(x)=(x!)2^x\sum_{i=0}^n a(x)b(x-i)$
不过循环边界到n不会越界吗?这对答案没有影响,因为斯特林数和组合数都为0。
那就直接NTT了,刚好给了一个NTT模数。(这莫非是提示?)
CODE:
#include<iostream>
#include<cstdio>
using namespace std; #define mod 998244353
int n,bit=,rev[],ans=;
long long fac[],inv[],ivf[];
long long a[],b[]; int qpow(int x,int y){
int ans=;
while(y){
if(y&)ans=1LL*ans*x%mod;
y>>=,x=1LL*x*x%mod;
}
return ans;
} void init(){
fac[]=ivf[]=inv[]=inv[]=;
for(int i=;i<=n;i++)fac[i]=fac[i-]*i%mod;
for(int i=;i<=n;i++)inv[i]=(mod-mod/i)*inv[mod%i]%mod;
for(int i=;i<=n;i++)ivf[i]=ivf[i-]*inv[i]%mod;
a[]=b[]=;
for(int i=,f=-;i<=n;i++,f=-f){
if (i==)a[i]=n+;
else a[i]=ivf[i]*(qpow(i,n+)-)%mod*inv[i-]%mod;
b[i]=f*ivf[i]%mod;
if(a[i]<)a[i]+=mod;
if(b[i]<)b[i]+=mod;
}
} void get_rev(){
while(bit<=n+n)bit<<=;
for(int i=;i<bit;i++)
rev[i]=(rev[i>>]>>)|(i&)*(bit>>);
} void NTT(long long a[],int dft){
for(int i=;i<bit;i++)
if(i<rev[i])swap(a[i],a[rev[i]]);
for(int i=;i<bit;i<<=){
long long W=qpow(,(mod-)/i/);
if(dft==-)W=qpow(W,mod-);
for(int j=;j<bit;j+=i<<){
long long w=;
for(int k=j;k<i+j;k++,w=w*W%mod){
long long x=a[k];
long long y=w*a[k+i]%mod;
a[k]=(x+y)%mod,a[k+i]=(x+mod-y)%mod;
}
}
}
int inv=qpow(bit,mod-);
if(dft==-)for(int i=;i<bit;i++)a[i]=a[i]*inv%mod;
} int main(){
scanf("%d",&n);
init();
get_rev();
NTT(a,),NTT(b,);
for(int i=;i<bit;i++)(a[i]*=b[i])%=mod;
NTT(a,-);
for(int i=;i<=n;i++){
ans+=qpow(,i)*fac[i]%mod*a[i]%mod;
if(ans>=mod)ans-=mod;
}
printf("%d",ans);
}
【BZOJ4555】【TJOI2016】【HEOI2016】求和 (第二类斯特林数+NTT卷积)的更多相关文章
- bzoj 4555 [Tjoi2016&Heoi2016] 求和 —— 第二类斯特林数+NTT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4555 关于第二类斯特林数:https://www.cnblogs.com/Wuweizhen ...
- BZOJ 4555:[TJOI2016&HEOI2016]求和(第二类斯特林数+NTT)
题目链接 \(Description\) 求 \[\sum_{i=0}^n\sum_{j=0}^iS(i,j)2^jj!\]对998244353取模后的结果. \(n<=10^5\) \(Sol ...
- 【BZOJ4555】【TJOI2016】【HEOI2016】求和 第二类斯特林数 NTT
题目大意 求\(f(n)=\sum_{i=0}^n\sum_{j=0}^i2^j\times j!\times S(i,j)\\\) 对\(998244353\)取模 \(n\leq 100000\) ...
- BZOJ4555 [Tjoi2016&Heoi2016]求和 【第二类斯特林数 + NTT】
题目 在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心. 现在他想计算这样一个函数的值: S(i, j)表示第二类斯特林数,递推公式为: S(i, j) = j ∗ S(i − 1, j) + ...
- 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! ...
- BZOJ5093 [Lydsy1711月赛]图的价值 【第二类斯特林数 + NTT】
题目链接 BZOJ5093 题解 点之间是没有区别的,所以我们可以计算出一个点的所有贡献,然后乘上\(n\) 一个点可能向剩余的\(n - 1\)个点连边,那么就有 \[ans = 2^{{n - 1 ...
- bzoj 5093 图的价值 —— 第二类斯特林数+NTT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5093 每个点都是等价的,从点的贡献来看,得到式子: \( ans = n * \sum\li ...
- bzoj5093:图的价值(第二类斯特林数+NTT)
传送门 首先,题目所求为\[n\times 2^{C_{n-1}^2}\sum_{i=0}^{n-1}C_{n-1}^ii^k\] 即对于每个点\(i\),枚举它的度数,然后计算方案.因为有\(n\) ...
- BZOJ 5093: [Lydsy1711月赛]图的价值 第二类斯特林数+NTT
定义有向图的价值为图中每一个点的度数的 \(k\) 次方之和. 求:对于 \(n\) 个点的无向图所有可能情况的图的价值之和. 遇到这种题,八成是每个点单独算贡献,然后累加起来. 我们可以枚举一个点的 ...
随机推荐
- Web服务器 --> 基于HTTP的网站开发
经过几十年的发展,已经出现几个成熟的处理HTTP的知名的Web服务器.这些服务器可以解析(handle)HTTP,当Web服务器接收到一个HTTP请求时,会根据配置的内容返回一个静态HTML页面或者调 ...
- Postgres-XL的限制
Postgres-XL是基于PostgreSQL的一个分布式数据库. 相比于PostgreSQL,XL的表的数据是可以分布到不同的datanode上的,对存在于不同的datanode上的数据进行处理, ...
- SAP 常用业务数据表设计
表的要求表中使用的字段请尽量参照各模块的SAP字段标准使用习惯: 例:"ZXSLRZX销售组织对应的利润中心"中的销售组织应该使用VKORG.利润中心应该使用PRCTR.根据表的 ...
- DELL PowerEdge R620安装Windows server(你想将windows安装在何处”找不到任何本地磁盘,“找不到驱动器”)已解决!
你可能碰到过DELL服务器上安装Windows server系列系统时无法识别或找不到硬盘的问题,对于DELL PowerEdge11-14代机器的,大家可以采用DELL的Lifecycle cont ...
- Linux菜鸟起飞之路【八】文本编辑器
在Linux中,文本编辑器有两个,VI和VIM.这两个编辑器用法差不多,但vim是vi的升级版,所以功能更强大一些. vim编辑器一共有三种模式,命令行模式.编辑模式和扩展模式. 进入vim界面,首先 ...
- STA basic
- Python学习笔记:面向对象(类)
1.类定义:Python3中,如果新建的类没有继承任何其他类,默认继承基础类object.Python2中如果没有显式继承object类就是经典类,而显式继承了object类就是新式类,Python2 ...
- 二叉排序树:HDU3791-二叉搜索树(用指针建立二叉排序树)
二叉搜索树 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Descr ...
- HDU 4812 D Tree 树分治
题意: 给出一棵树,每个节点上有个权值.要找到一对字典序最小的点对\((u, v)(u < v)\),使得路径\(u \to v\)上所有节点权值的乘积模\(10^6 + 3\)的值为\(k\) ...
- jenkins 之 iOS 打包及上传至蒲公英
准备条件 iMAC(要 Mac OS 系统,安卓 和 苹果 可以在同一台电脑上打包) xcode 最新版,要已安装对应的开发证书(生成一个 Ad-Hoc 类型的包就有了) brew(当前管理员账户安装 ...