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转移方程的推 ...
随机推荐
- set类型转string[] 正确写法
测试源码: 1 @org.junit.Test 2 public void testSetType(){ 3 //测试set类型转string[] 4 // 5 Set<String> s ...
- asyncio异步编程
1. 协程 协程不是计算机提供,程序员认为创造 协程(Coroutine),也可以被称为微线程,是一种用户态内的上下文切换技术,其实就是一个线程实现代码块相互切换执行.例如: def func1(): ...
- jQuery里的mouseover与mouseenter事件类型区别
JQ里面有mouseover和mouseenter 2个事件类型干着差不多的活,用不好经常出现些小问题. 今天我解释一下原理: 事件类型翻译: mouseover 鼠标移上 mouseenter 鼠 ...
- 纯手画WinForm的Alert提示弹出框
纯手画WinForm的Alert弹框 一.窗体设置 设置以下属性: 属性名 属性值 说明 AutoScaleMode None 确定屏幕分辨率或字体更改时窗体如何缩放 BackColor 103, 1 ...
- Spring系列2:Spring容器基本概念和使用
本文内容 简单回顾IoC和DI概念 Spring容器的概念 的xml配置和初始化 容器的基本使用 bean的定义和初始化配置 简单理解IoC和DI概念 什么是IoC控制反转? 通俗地但不严谨地讲,以前 ...
- 【笔记】macos上部署thanos_receiver + thanos_query
为了方便起见,在mac笔记本上进行了测试 1.写一个发送数据的客户端 package main import ( "fmt" "io/ioutil" " ...
- 微服务架构 | 12.1 使用 Apache Dubbo 实现远程通信
目录 前言 1. Dubbo 基础知识 1.1 Dubbo 是什么 1.2 Dubbo 的架构图 1.3 Spring Cloud 与 Dubbo 的区别 1.4 Dubbo 的特点 1.5 Dubb ...
- 常用字符的ASCII码
字母 ASCII码 十进制数 0 00110000 48 9 00111001 57 A 01000001 ...
- gin中使用路由组
package main import ( "github.com/gin-gonic/gin" ) func main() { router := gin.Default() / ...
- JavaScript设计原则与编程技巧
1 设计原则概述 <UNIX/LINUX设计哲学>设计准则 ① 小既是美. ② 每个程序只做一件事情. ③ 快速建立原型. ④ 舍弃高效率而取可移植性. ⑤ 避免强制性的图形化界面交互. ...