CF932E: Team Work 题解(第二类斯特林数)
CF932E: Team Work 题解
E:
题意:输入 , 求 。(n<=1e9,k<=5000)
非常简短的题面,但是威力惊人啊,数学不好根本不知道如何下手,推着推着式子发现越推越复杂。
Solution1:求导
我们先把我们以前会的东西列出来:
①:
②:
③:(二项式展开)
④:
第四个式子左边是什么呢,就是 个数任意选,把每种情况选中的个数加起来。因为每个位置对总和贡献相同,都在 种情况中出现过,因此总和为 。
但这道题要加的不是 ,而是 。 是一个不变的数字,和③式形式不是很一样(其实是很不一样)。
这时候要用到我们的求导大法,将③式左右同时对 求导,得⑤式:
⑤:
为什么下标 要从 开始,因为 求导完是 而不是 ,我们避免这种讨论,所以让多项式指数一直大于 0。
然后你会发现④式其实就是⑤式 的情况。我们有了一个思路:通过求导,使得左边的系数变成 ,这里的 和 都与 无关,我们最终代入 便可以消去 。
为了再次求导产生 ,我们将两边乘上 ,左式变为 。这样不断地求导再乘 ,最终可推出我们想求的式子。
......
我们用自己的猴力计算,把右边求导再乘 ,发现每一项的系数是可以递推求出的 : 。复杂度 。
最后还要注意到当 时,右式不足以以这种形式导 k 次,所以 n 比较小的时候直接暴力求就行。
突然发现这题不就是2020省选D1T2组合数问题吗,数据范围也是k^2,当时同省很多大佬都会做的,退役是完全因为自己菜,只能说相见恨晚。
Solution2:第二类斯特林数
此题可以用斯特林数进行推导,可惜模数不能NTT,因此也只好用 n 方递推求斯特林数。
事实上在上面求系数 a 时的递推式就是斯特林数乘上一个下降幂。
先来个纯数学推法:
由小球放盒子可以得到一个拆解 的公式:见此博客二级标题“经典应用”
枚举上界到 k 或到 i 其实是一样的,因为后面的两个括号暗示了 ,否则为 0,因为这题 k 比 i 上限要小,为了方便后续推导我们写成 k。
n 太大没法求后面的和,但是一个类似组合数求和的形式让我们想到二项式,我们往二项式去凑,希望可以把组合数求和化为幂次的形式.
而将右边化为组合数就需要有 的形式,我们发现下面两项加起来刚好能把 i 消掉,很妙。
右边求和虽然长得丑但也是二项式求和的形式, 时组合数的值应当为 0。
本来可以 klogk 求 第二类斯特林数(行),可惜模数不喜欢。
Solution3:还是第二类斯特林数
担心上面的推导过程写错,或者卡住?litble佬给出了一个省去好多步骤的推法,但是她的描述有点太简略了,我详细写下。
转化题意,题目相当于:从 n 个盒子里选 i 个,然后将 k 个球任意装进选择的 i 个盒子中(可为空),求总方案数。
我们也枚举盒子,但是我们不枚举选择的 i 个,而是枚举装了球的盒子数量 j (也就是不可为空)。
我们考虑有多少种情况是 j 个盒子装了球: 先选 j 个盒子,其他的 n-j 个盒子是否被选进那 i 个当中无所谓,因此一共有 种情况满足:这 j 个盒子装了球。
答案为:, 表示 k 个球装进 j 个盒子,每个盒子不为空的方案,显然 。
所以最终答案为:
虽然 n 很大没法求阶乘,但是转化为下降幂的形式后,因为指数 j 上限为 k,因此可以暴力乘出结果。
__EOF__

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具