Solution Set - Stirling 数相关杂题
《好多题的题解》
根据结论
\]
我们只需要求出 \(x^{\overline{n}}\) 的各项系数。显然的 \(\mathcal O(n\log^2n)\) 做法就足够过掉洛谷上的原题了,但是我们 OJ 比较卓越,所以得用 \(\mathcal O(n\log n)\) 的做法。
考虑倍增。令 \(F_n(x)=x^{\overline{n}}\),那么
\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)\)。
你永远可以相信组合意义。
轮换数量的 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!}\),那么
\]
\(\mathcal O(n\log n)\) 快速幂即可。注意 \([x^0]G(x)\not=1\),需要位移后进行 \(\ln\) 运算。
考虑 \({n\brace m}\) 的组合意义:\(n\) 个不同的球放入 \(m\) 个相同的盒子且盒子不空的方案数。而 \(m!{n\brace m}\) 即 \(n\) 个不同的球放入 \(m\) 个不同的盒子且盒子不空的方案数。所以可以二项式反演求 \({n\brace m}\):
\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)\) 卷一卷即可。
组合意义嘛。把若干求放入一个盒子的 EGF 为 \(G(x)=\sum_{i>0}\frac{x^i}{i!}=e^x-1\),令 \(R(x)=\sum_i\frac{{i\brace k}x^i}{i!}\),那么
\]
还是 \(\mathcal O(n\log n)\) 快速幂。于是你惊讶地发现整个算法与第一类求列的区别只有:初始 \(G(x)\) 的系数从 \(x\) 的逆元变成了 \(x!\) 的逆元。所以这两类数确实是近亲(?)
「HEOI 2016 / TJOI 2016」「洛谷 P4091」求和
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!\) 的系数求和即可。
如果只有行上限制就可以直接组合数算,考虑用 DP 化简列上的组合问题。令 \(f(i)\) 表示 \(m=i\) 时的答案,总数减去不合法方案数,得到
\]
\(\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_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)\) 可过。
设某条路径的长度为 \(d\),注意到
\]
其中 \(\binom{d}{k}\) 能够被赋予组合意义,对它换根 DP 即可。复杂度 \(\mathcal O(Tnk)\)。
非常自然的想法是将原问题用最大值的位置划分为两个关于最长贪心上升子序列的问题,但不要被这个想法限制了。令 \(A\leftarrow A-1,B\leftarrow B-1\),先用除最大值外的 \((n-1)\) 个数构成 \((A+B)\) 个轮换,不放认为轮换中的最大值在第一个的位置,那么把轮换按第一个位置的大小依次放置,就能得到对应长度的最长贪心上升子序列。而所有轮换确定后,最大值 \(n\) 自然只有一个位置能放(注意轮换内部形态)。因此,答案为
\]
复杂度 \(\mathcal O(nA)-\mathcal O(1)\)。
Solution Set - Stirling 数相关杂题的更多相关文章
- hdu 4372 第一类stirling数的应用/。。。好题
/** 大意: 给定一系列楼房,都在一条水平线上,高度从1到n,从左侧看能看到f个, 从右侧看,能看到b个,问有多少种这样的序列.. 思路: 因为肯定能看到最高的,,那我们先假定最高的楼房位置确定,那 ...
- Atcoder&CodeForces杂题11.7
Preface 又自己开了场CF/Atcoder杂题,比昨天的稍难,题目也更有趣了 昨晚炉石检验血统果然是非洲人... 希望这是给NOIP2018续点rp吧 A.CF1068C-Colored Roo ...
- HDU 4372 Count the Buildings:第一类Stirling数
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4372 题意: 有n栋高楼横着排成一排,各自的高度为1到n的一个排列. 从左边看可以看到f栋楼,从右边看 ...
- Bell(hdu4767+矩阵+中国剩余定理+bell数+Stirling数+欧几里德)
Bell Time Limit:3000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status ...
- Catalan&Stirling数
Catalan&Stirling数 Tags:数学 作业部落 评论地址 Catalan数 \(1,1,2,5,14,42,132,429,1430,4862,16796,58786...\) ...
- [BZOJ5093]图的价值(NTT+第二类Stirling数)
5093: [Lydsy1711月赛]图的价值 Time Limit: 30 Sec Memory Limit: 256 MBSubmit: 250 Solved: 130[Submit][Sta ...
- LightOJ 1326 – Race 第二类Stirling数/
简单的模板题. 题意:问n匹马出现的不同排名数. 题解:可以使用DP,本质上还是第二类Stirling数(隔板法) #include <stdio.h> #include <iost ...
- 第二类Stirling数初探 By cellur925
上午noi.ac崩崩崩了,栽在组合数学上,虽说最后在辰哥&Chemist的指导下A掉了此题,也发现自己组合数学太弱了qwq. 在luogu上找题,结果找到了一个第二类斯特林数的题(还是双倍经验 ...
- dp杂题(根据个人进度选更)
----19.7.30 今天又开了一个新专题,dp杂题,我依旧按照之前一样,这一个专题更在一起,根据个人进度选更题目; dp就是动态规划,本人认为,动态规划的核心就是dp状态的设立以及dp转移方程的推 ...
随机推荐
- spring cloud Zuul 多层拦截 --- 心得
1.前言 根据教材.博客文章的实例实操,基本都是单层拦截,没有找到多层拦截的具体写法 ,让我走了很多弯路,我将其写在这里,以待以后参考. 2.环境 spring boot : 2.1.6.RELEAS ...
- JSP页面实际上就是Servlet
注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6513069824690618883/ 前面一直提到了Servlet的内容,也是我们平时理解的后台,这次说一下前台的 ...
- maven仓库策略
当构建Maven项目时,首先检查pom.xml文件以确定依赖包的下载位置,执行顺序如下: 1.从本地资源库中查找并获得依赖包,如果没有,执行第2步. 2.从Maven默认中央仓库中查找并获得依赖包(h ...
- 在 python 项目中如何记录日志
一. 概述 写本文的目的是我在写 python 项目的时候需要记录日志,我忘记怎么处理了,每次都需要去网上查一遍,好记性不如烂笔头, 这里把查阅的内容记录下来,方便以后查找. python 项目中记录 ...
- Redis内存分析工具之redis-rdb-tools的安装与使用
操作系统:Centos7 1.redis-rdb-tools工具是用python语言编写的,所以首先需要安装python: 安装: (1)用 wget 下载 python 2.7 并解压( 如果 ...
- IDEA超级好用的插件推荐
IDEA超级好用的插件推荐 以下都是本人使用idea开发以来,所使用过的插件,强烈推荐,提升代码质量,事半功倍之首选!!! 先介绍下如何安装这些插件:(本人使用idea的版本是2020.2.3) 1. ...
- 论文翻译:2019_TCNN: Temporal convolutional neural network for real-time speech enhancement in the time domain
论文地址:TCNN:时域卷积神经网络用于实时语音增强 论文代码:https://github.com/LXP-Never/TCNN(非官方复现) 引用格式:Pandey A, Wang D L. TC ...
- deepin20搜狗输入法使用
放大打字框 打出中文语句符号
- Ajax的IE缓存问题
Ajax之IE缓存问题 <!-- IE浏览器会对ajax的结果进行一个缓存,这样就会导致一个缓存问题 浏览器会读取缓存 而不会去使用一个新的数据 这样对一个时效性比较强的场景 ajax的缓存会影 ...
- String类-intern方法
1 package cn.itcast.p1.string.demo; 2 3 class StringObjectDemo { 4 public static void main(String[] ...