《好多题的题解》


  「洛谷 P5408」第一类斯特林数·行

  根据结论

\[x^{\overline{n}}=\sum_i{n\brack i}x^i,
\]

我们只需要求出 \(x^{\overline{n}}\) 的各项系数。显然的 \(\mathcal O(n\log^2n)\) 做法就足够过掉洛谷上的原题了,但是我们 OJ 比较卓越,所以得用 \(\mathcal O(n\log n)\) 的做法。

  考虑倍增。令 \(F_n(x)=x^{\overline{n}}\),那么

\[\begin{aligned}
\frac{F_{2n}(x)}{F_n(x)} &= F_n(x+n)\\
&= \sum_{i=0}^n{n\brack i}(x+n)^i\\
&= \sum_{i=0}^n{n\brack i}\sum_{j=0}^i\binom{i}{j}x^jn^{i-j}\\
&= \sum_{j=0}^n\frac{x^j}{j!}\sum_{i=j}^n\frac{n\brack i}{i!}\cdot\frac{n^{i-j}}{(i-j)!}.
\end{aligned}
\]

可见 \(F_n(x+n)\) 是差卷积形式,\(\mathcal O(n\log n)\) 求出后再和 \(F_n(x)\) 卷起来,\(\mathcal O(n\log n)\) 完成倍增。总复杂度 \(T(n)=T(n/2)+\mathcal O(n\log n)=\mathcal O(n\log n)\)。


   「洛谷 P5409」第一类斯特林数·列

  你永远可以相信组合意义。

  轮换数量的 EGF 为 \(G(x)=\sum_{i>0}\frac{(i-1)!x^i}{i!}\),而显然“构成 \(m\) 个圆排列”等价于随便拿出 \(m\) 个总长为 \(n\) 的轮换,再为轮换中的数安排具体的值,最后除掉不同轮换间的顺序。令 \(R(x)=\sum_i\frac{{i\brack k}x^i}{i!}\),那么

\[R(x)=\frac{G^k(x)}{k!}.
\]

\(\mathcal O(n\log n)\) 快速幂即可。注意 \([x^0]G(x)\not=1\),需要位移后进行 \(\ln\) 运算。


  「洛谷 P5395」第二类斯特林数·行

  考虑 \({n\brace m}\) 的组合意义:\(n\) 个不同的球放入 \(m\) 个相同的盒子且盒子不空的方案数。而 \(m!{n\brace m}\) 即 \(n\) 个不同的球放入 \(m\) 个不同的盒子且盒子不空的方案数。所以可以二项式反演求 \({n\brace m}\):

\[m^n=\sum_{i=0}^m \binom{m}{i}\cdot i!{n\brace i}\\
\begin{aligned}
\Rightarrow {n\brace m} &= \frac{1}{m!}\sum_{i=0}^m(-1)^{m-i}\binom{m}{i}i^n\\
&= \sum_{i=0}^m\frac{(-1)^{m-i}}{(m-i)!}\cdot\frac{i^n}{i!}.
\end{aligned}
\]

好看又好记的式子。而这个通项恰好就是关于 \(m\) 这维的卷积形式,所以 \(\mathcal O(n\log n)\) 卷一卷即可。


  「洛谷 P5396」第二类斯特林数·列

  组合意义嘛。把若干求放入一个盒子的 EGF 为 \(G(x)=\sum_{i>0}\frac{x^i}{i!}=e^x-1\),令 \(R(x)=\sum_i\frac{{i\brace k}x^i}{i!}\),那么

\[R(x)=\frac{G^k(x)}{k!}.
\]

还是 \(\mathcal O(n\log n)\) 快速幂。于是你惊讶地发现整个算法与第一类求列的区别只有:初始 \(G(x)\) 的系数从 \(x\) 的逆元变成了 \(x!\) 的逆元。所以这两类数确实是近亲(?)


  「HEOI 2016 / TJOI 2016」「洛谷 P4091」求和

\[\begin{aligned}
f(n) &= \sum_{i=0}^n\sum_{j=0}^i{i\brace j}2^jj!\\
&= \sum_{j=0}^n2^jj!\sum_{i=0}^n{i\brace j}\\
&= \sum_{j=0}^n2^jj!\sum_{i=0}^n\sum_{k=0}^j\frac{(-1)^{j-k}k^i}{k!(j-k)!}\\
&= \sum_{j=0}^n2^jj!\sum_{k=0}^j\frac{(-1)\sum_{i=0}^nk^i}{k!(j-k)!}
\end{aligned}
\]

特殊处理 \(k=0\) 和 \(k=1\),其余情况最内层和式可以等差数列求和,得到卷积形式。\(\mathcal O(n\log n)\) 求出卷积再每项带 \(2^jj!\) 的系数求和即可。


  「TC 13444」CountTables

  如果只有行上限制就可以直接组合数算,考虑用 DP 化简列上的组合问题。令 \(f(i)\) 表示 \(m=i\) 时的答案,总数减去不合法方案数,得到

\[f(i)=\binom{c^i}{n}-\sum_{j=1}^{i-1}{i\brace j}f(j).
\]

\(\mathcal O(n^2)\) 大力算就能过。


  「CF 715E」Complete the Permutations

  不管怎么说,这个 3400 还是虚高了。

  显然的结论:对于已补全的排列 \(p\) 和 \(q\),它们的距离为 \(n\) 减去置换 \(\sigma:p_i\mapsto q_i~(\forall i)\) 中的轮换数量。讨论一对 \(\lang p_i,q_i\rang\) 目前的状态:

  • \(\lang a,b\rang~(ab\not=0)\),将 \(a,b\) 视作同一点(缩点),环的数量不改变;
  • \(\lang 0,b\rang~(b\not=0)\),称之为 A 类边;
  • \(\lang a,0\rang~(a\not=0)\),称之为 B 类边;
  • \(\lang 0,0\rang\),称之为 C 类边。

  同时又注意到,若 \(a\mapsto b,b\mapsto c~(b\not=0)\) 已经确定,那么无论 \(a,c\) 是否为 \(0\),\(b\) 都可以被忽略,得到 \(a\mapsto c\)。考虑完成上述缩点后该操作的执行:

  • A 类边 + A 类边,两者顺序任意,得到新的 A 类边;
  • A 类边 + B 类边,不可能执行;
  • A 类边 + C 类边,C 放 A 后面,得到新的 C 类边;
  • B 类边 + B 类边,两者顺序任意,得到新的 B 类边;
  • B 类边 + C 类边,C 妨 B 前面,得到新的 C 类边;

  因此,对于 A 类和 B 类边,要不自己连成完整的环,要不直接或间接地被缩入某个 C 类边。注意到以上操作不改变 C 类边的数量,且 ABC 间不相互影响。所以“A 类边构成环,剩下的缩入 C 类边”“B 类边构成环,剩下的缩入 C 类边”以及“C 类边构成环”三个组合问题是独立的。记 \(A,B,C\) 分别为三类边在完成所有缩边操作后的数量,考虑它们的方案数关于环数量的 GF:

\[[x^k]G_A(x)=\sum_{i=0}^A\binom{A}{i}{i\brack k}(A-i+C-1)^{\underline{A-i}};\\
[x^k]G_B(x)=\sum_{i=0}^B\binom{B}{i}{i\brack k}(B-i+C-1)^{\underline{B-i}};\\
[x^k]G_C(x)=C!{C\brack k}.
\]

解释一下 \(G_A(x)\):枚举 \(i\) 条自己成环,乘上选边和成环方案,其余 \((A-i)\) 条边依次选一条边合并(可能是 A+A 或者 A+C,和剩下的任意边都能合并)。

  记 \(R(x)=G_A(x)G_B(x)G_C(x)\),设初始时已经有 \(l\) 个环确定了,那么 \([x^{n-k}]x^lR(x)\) 即为距离为 \(k\) 的方案。中途涉及的运算全部暴力,\(\mathcal O(n^2)\) 可过。


  「HDU 4625」JZPTREE

  设某条路径的长度为 \(d\),注意到

\[d^k=k!\sum_{i=0}^k{k\brace i}\binom{d}{k},
\]

其中 \(\binom{d}{k}\) 能够被赋予组合意义,对它换根 DP 即可。复杂度 \(\mathcal O(Tnk)\)。


  「FJOI 2016」「洛谷 P4609」建筑师

  非常自然的想法是将原问题用最大值的位置划分为两个关于最长贪心上升子序列的问题,但不要被这个想法限制了。令 \(A\leftarrow A-1,B\leftarrow B-1\),先用除最大值外的 \((n-1)\) 个数构成 \((A+B)\) 个轮换,不放认为轮换中的最大值在第一个的位置,那么把轮换按第一个位置的大小依次放置,就能得到对应长度的最长贪心上升子序列。而所有轮换确定后,最大值 \(n\) 自然只有一个位置能放(注意轮换内部形态)。因此,答案为

\[\binom{A+B}{A}{n-1\brack A+B}.
\]

复杂度 \(\mathcal O(nA)-\mathcal O(1)\)。

Solution Set - Stirling 数相关杂题的更多相关文章

  1. hdu 4372 第一类stirling数的应用/。。。好题

    /** 大意: 给定一系列楼房,都在一条水平线上,高度从1到n,从左侧看能看到f个, 从右侧看,能看到b个,问有多少种这样的序列.. 思路: 因为肯定能看到最高的,,那我们先假定最高的楼房位置确定,那 ...

  2. Atcoder&CodeForces杂题11.7

    Preface 又自己开了场CF/Atcoder杂题,比昨天的稍难,题目也更有趣了 昨晚炉石检验血统果然是非洲人... 希望这是给NOIP2018续点rp吧 A.CF1068C-Colored Roo ...

  3. HDU 4372 Count the Buildings:第一类Stirling数

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4372 题意: 有n栋高楼横着排成一排,各自的高度为1到n的一个排列. 从左边看可以看到f栋楼,从右边看 ...

  4. Bell(hdu4767+矩阵+中国剩余定理+bell数+Stirling数+欧几里德)

    Bell Time Limit:3000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Submit Status  ...

  5. Catalan&Stirling数

    Catalan&Stirling数 Tags:数学 作业部落 评论地址 Catalan数 \(1,1,2,5,14,42,132,429,1430,4862,16796,58786...\) ...

  6. [BZOJ5093]图的价值(NTT+第二类Stirling数)

    5093: [Lydsy1711月赛]图的价值 Time Limit: 30 Sec  Memory Limit: 256 MBSubmit: 250  Solved: 130[Submit][Sta ...

  7. LightOJ 1326 – Race 第二类Stirling数/

    简单的模板题. 题意:问n匹马出现的不同排名数. 题解:可以使用DP,本质上还是第二类Stirling数(隔板法) #include <stdio.h> #include <iost ...

  8. 第二类Stirling数初探 By cellur925

    上午noi.ac崩崩崩了,栽在组合数学上,虽说最后在辰哥&Chemist的指导下A掉了此题,也发现自己组合数学太弱了qwq. 在luogu上找题,结果找到了一个第二类斯特林数的题(还是双倍经验 ...

  9. dp杂题(根据个人进度选更)

    ----19.7.30 今天又开了一个新专题,dp杂题,我依旧按照之前一样,这一个专题更在一起,根据个人进度选更题目; dp就是动态规划,本人认为,动态规划的核心就是dp状态的设立以及dp转移方程的推 ...

随机推荐

  1. VMware桥接模式连接局域网和互联网

    第一步:确认本地网关地址 第二步选择桥接模式: 我比较幸运,桥接到"自动",就已经连接成功.不用逐个试错. 修改 ifcfg-ens33 和 新建 ifcfg-br0 [root@ ...

  2. 基于 Keras 实现图像风格转移

     Style Transfer 这个方向火起来是从2015年Gatys发表的Paper A Neural Algorithm of Artistic Style(神经风格迁移) , 这里就简单提一下论 ...

  3. android-sdk环境变量配置

    1.android-sdk环境变量 1.在系统变量新建:ANDROID_HOME,对应变量值为:G:\android-sdk-windows(sdk安装路径) 2.path添加两个变量(tools和p ...

  4. 服务监控 | 彻底搞懂Dropwizard Metrics一篇就够了

    Metrics是一个提供服务性能检测工具的Java类库,它提供了功能强大的性能指标工具库用于度量生产环境中的各关键组件性能. 度量类型 Metrics提供了以下几种基本的度量类型: Gauge:用于提 ...

  5. elementui-日期选择器时间清空报错踩坑

    今天在项目中遇到了这个大坑 具体问题:在日期清空时会报错 解决方法:给日期绑定的值添加监听

  6. day5 数组对角线及最大值

    1.输出M行M列数组方针,求对角线元素和#define M 5void fun(int xx[][M], int n)//n行n列{ int i = 0; int sum = 0; for (i = ...

  7. MATLAB中拟合算法刚入门

    %%%1.拟合问题:(做预测,主要使用的范围是样本比较小,拟合效果会好,样本比较多,拟合的效果就不是很好) 1.应用预测的场景:已经知道10年的样本,预测第11年以内的数据 2.用拟合的到关系式:样本 ...

  8. dubbo系列二、dubbo请求流程记录

    目录 1.dubbo请求处理流程 1.1. consumer端处理流程 1.2.provider端处理流程 1.3.dubbo请求分析记录-图 泳道图 xmind图 2.dubbo请求核心说明 1.d ...

  9. Java集合-ArrayList源码分析

    目录 1.结构特性 2.构造函数 3.成员变量 4.常用的成员方法 5.底层数组扩容原理 6.序列化原理 7.集合元素排序 8.迭代器的实现 9.总结 1.结构特性 Java ArrayList类使用 ...

  10. 计算机视觉3-> yolov5目标检测1 |从入门到出土

    本来就想着是对自己第一次跑yolov5的coco128的一个记录,没想到现在准备总结一下的时候,一方面是继续学习了一些,另一方面是学长的一些任务的要求,挖出了更多的东西,所以把名字改为了"从 ...