【洛谷2791】 幼儿园篮球题 第二类斯特林数+NTT
求 \(\sum_{i=0}^{k}\binom{m}{i}\binom{n-m}{k-i}i^L\) \((1\leqslant n,m\leqslant 2\times 10^7,1\leqslant L\leqslant 2\times 10^5)\)
这个式子比较简洁,然后也没啥可推的,所以我们将 \(i^L\) 展开.
那么原式为 \(\sum_{i=0}^{k}\binom{m}{i}\binom{n-m}{k-i}\sum_{j=0}^{i}\binom{i}{j}S(L,j)\times (j!)\)
考虑将 \(j\) 前提,得 \(\sum_{j=0}^{k}(j!)S(L,j)\sum_{i=0}^{k}\binom{m}{i}\binom{n-m}{k-i}\binom{i}{j}\)
注意:即使 \(i<j\) 也是无所谓的,因为后面那个组合数可以帮我们抵消掉.
我们发现后面的组合数看起来很眼熟,可以考虑对组合数搞点事情.
\(\sum_{i=0}^{k}\binom{m}{i}\binom{n-m}{k-i}\binom{i}{j}\)
\(\Rightarrow \sum_{i=0}^{k}\binom{m}{j}\binom{m-j}{i-j}\binom{n-m}{k-i}\)
\(\Rightarrow \binom{m}{j}\sum_{i=0}^{k}\binom{m-j}{i-j}\binom{n-m}{k-i}\)
后面那两个组合数有一个性质:上面的 \(n\) 之和和下面的 \(m\) 之和都是定值,所以可以用范德蒙德恒等式
\(\Rightarrow \binom{m}{j}\binom{n-j}{k-j}\)
那么最终答案就是 \(\sum_{j=0}^{k}(j!)S(L,j)\binom{m}{j}\binom{n-j}{k-j}\)
其中斯特林数可以用 \(NTT\) 预处理,然后枚举一下 \(j\) 就好了.
#include <bits/stdc++.h>
#define LL long long
#define setIO(s) freopen(s".in","r",stdin)
using namespace std;
const int M=2000003;
const int N=20000006;
const int mod=998244353,G=3;
inline int qpow(int x,int y)
{ int tmp=1; for(;y;y>>=1,x=(LL)x*x%mod) if(y&1) tmp=(LL)tmp*x%mod; return tmp;
}
inline int INV(int x) { return qpow(x,mod-2); }
inline void NTT(int *a,int len,int flag)
{int i,j,k,mid; for(i=k=0;i<len;++i) {if(i>k) swap(a[i],a[k]); for(j=len>>1;(k^=j)<j;j>>=1); } for(mid=1;mid<len;mid<<=1) { int wn=qpow(G,(mod-1)/(mid<<1)); if(flag==-1) wn=INV(wn); for(i=0;i<len;i+=(mid<<1)) {int w=1; for(j=0;j<mid;++j,w=(LL)w*wn%mod) {int x=a[i+j], y=(LL)a[i+j+mid]*w%mod; a[i+j]=(LL)(x+y)%mod, a[i+j+mid]=(LL)(x-y+mod)%mod; }}} if(flag==-1) {int rev=INV(len); for(i=0;i<len;++i) a[i]=(LL)a[i]*rev%mod; }
}
int max_n,max_m,L;
int fac[N],inv[N],f[M],A[M],B[M];
inline int C(int x,int y) { return y>x?0:(LL)fac[x]*inv[y]%mod*inv[x-y]%mod; }
inline void Initialize()
{ int i,j,limit; inv[0]=fac[0]=1; for(i=1;i<N;++i) fac[i]=(LL)fac[i-1]*i%mod; inv[N-1]=INV(fac[N-1]); for(i=N-2;i>=1;--i) inv[i]=1ll*inv[i+1]*(i+1)%mod; for(i=0;i<=L;++i) { A[i]=inv[i],B[i]=(LL)qpow(i,L)*inv[i]%mod; if(i&1) A[i]=mod-A[i]; } for(limit=1;limit<=2*(L+1);limit<<=1); NTT(A,limit,1),NTT(B,limit,1); for(i=0;i<limit;++i) A[i]=(LL)A[i]*B[i]%mod; NTT(A,limit,-1); for(i=0;i<=L;++i) f[i]=A[i];
}
inline void solve()
{ LL ans=0ll; int i,j,n,m,k,Lim; scanf("%d%d%d",&n,&m,&k),Lim=min(min(n,m),L); for(i=0;i<=Lim;++i) (ans+=(LL)f[i]*fac[i]%mod*C(m,i)%mod*C(n-i,k-i))%=mod; (ans*=(LL)fac[k]*fac[n-k]%mod*inv[n]%mod)%=mod; printf("%lld\n",ans);
}
int main()
{ // setIO("input"); int i,j,T; scanf("%d%d%d%d",&max_n,&max_m,&T,&L); Initialize(); while(T--) solve(); return 0;
}
【洛谷2791】 幼儿园篮球题 第二类斯特林数+NTT相关推荐
- luogu2791 幼儿园篮球题 第二类斯大林数(特)卡常NTT
我真的是***的 原本应该是乘以iLi^LiL 但是因为 iL=∑j=0L\{Lj\}(ij)j!i^L=\sum_{j = 0}^L {L \brace j} \binom{i}{j} j! iL= ...
- 洛谷 P2791 幼儿园篮球题
洛谷 P2791 幼儿园篮球题 https://www.luogu.org/problemnew/show/P2791 我喜欢唱♂跳♂rap♂篮球 要求的是:\(\sum_{i=0}^kC_m^iC_ ...
- bzoj5093 图的价值【第二类斯特林数+NTT】
解题思路: 考虑直接枚举每个点连的边,图中其余点之间随便连,那么直接推式子: ans=n∗2C2n−1∑i=0n−1Cin−1ikans=n*2^{C_{n-1}^2}\sum\limits_{i=0 ...
- 洛谷P2791 幼儿园篮球题
题目描述 题解 可以列出式子∑i=0k(im)(k−in−m)iL(kn)\frac{\sum_{i=0}^k(_i^m)(_{k-i}^{n-m})i^L}{(_k^n)}(kn)∑i=0k(i ...
- 【CF961G】Partitions(第二类斯特林数)
[CF961G]Partitions(第二类斯特林数) 题面 CodeForces 洛谷 题解 考虑每个数的贡献,显然每个数前面贡献的系数都是一样的. 枚举当前数所在的集合大小,所以前面的系数\(p\ ...
- 第一类和第二类斯特林数
第一类斯特林数 第一类斯特林数定义如下: \(s_1(n,k)\)表示\(n\)个元素组成\(k\)个圆排列的方案数. 其中\(n\)个元素的圆排列定义为\(n\)个元素围成一圈的排列,两个圆排列本质 ...
- BZOJ 2159 「国家集训队」Crash 的文明世界(第二类斯特林数,换根DP)【BZOJ计划】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2159 是 hydro 的 BZOJ ...
- 新疆大学(新大)OJ xju 1006: 比赛排名 第二类斯特林数+阶乘
题目链接:http://acm.xju.edu.cn/JudgeOnline/problem.php?id=1006 第二类斯特林数: 第二类Stirling数实际上是集合的一个拆分,表示将n个不同的 ...
- 1847 奇怪的数学题(杜教筛 + Min_25 + 第二类斯特林数)
1847 奇怪的数学题 推式子 ∑i=1n∑j=1nsgcd(i,j)k∑d=1nsgcd(d)k∑i=1nd∑j=1nd[gcd(i,j)=1]∑d=1nsgcd(d)k(2∑i=1ndϕ(i)−1 ...
最新文章
- 直接拿来用!最火的Android开源项目(一)
- Android开发者指南(12) —— Android Supported Media Formats
- 【8】万魂杀服务器开发方面之新版GM工具
- 你需求什么样的图片素材资源,各种口味随你挑选!
- mysql获取当前时间,前一天,后一天
- mysql之旅【第一篇】
- Protobuf实现Android Socket通讯开发教程
- Android学习开发之路~~系列教程
- 数据情报分析EXCEL篇
- 嵌入式和单片机的区别到底在哪?
- java js 二级联动下拉列表_最简单js代码实现select二级联动下拉菜单
- linux tmp文件夹满了,linux出现tmp空间满的情况解决
- 基于近半年Twitter与Github趋势分析_12大分类500+ChatGPT最新开源GitHub存储库(涵盖ChatGPT开发全框架、全编程语言及教程)——每周更新
- 多家机构宣布接入文心一言能力
- PICASSO,一个高效的搜推广稀疏训练解决方案
- 【行业基础】UV打印机喷头波形和墨水关系
- 从傅里叶变换到Laplace变换
- mysql unique 重复_Mysql中 unique列插入重复值该怎么解决呢
- [项目管理]项目计划如何做
- 计算机系统使用显示器需配有,在计算机系统中,使用显示器一般需配有( )。...