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转移方程的推 ...
随机推荐
- alias 中使用 awk
alias hehistory10='history |awk "{print \$2}"|sort|uniq -c|sort -rn|head -10' alias lv='ls ...
- SYCOJ906瑞士轮
题目-瑞士轮 (shiyancang.cn) 模拟题 #include<bits/stdc++.h> using namespace std; const int N=1e5+520; i ...
- 论文翻译:2020_Nonlinear Residual Echo Suppression using a Recurrent Neural Network
论文地址:https://indico2.conference4me.psnc.pl/event/35/contributions/3367/attachments/779/817/Thu-1-10- ...
- BitMap算法知识笔记以及在大数据方向的使用
概述 所谓的BitMap算法就是位图算法,简单说就是用一个bit位来标记某个元素所对应的value,而key即是该元素,由于BitMap使用了bit位来存储数据,因此可以大大节省存储空间,这是很常用的 ...
- [C 语言基础] 如何调用不同文件中的函数
很多时候需要将实现不同功能的函数或者与某个模块有关的函数写在一个文件里.这样有两个好处: 1. 方便以后调用:以后需要用到这个模块,或者这类函数,直接将相关文件复制过去,再稍微修改一下就能应用于不同场 ...
- 浅谈 Java 多线程(一) --- JMM
为什么使用多线程 更多的处理器核心数(硬件的发展使 CPU 趋向于更多的核心数,如果不能充分利用,就无法显著提升程序的效率) 更快的响应时间(复杂的业务场景下,会存在许多数据一致性不强的操作,如果将这 ...
- 记录未解决的问题:docker中无法启动mysqld
首先在docker中安装mysql server的包: sudo yum install mysql sudo yum install mariadb-server mariadb /usr/libe ...
- 判断jquery类库是否加载,如未加载则加载。
本人所有文章使用到的东西均在"渭南电脑维修网"网站中得以实现和应用,还请大家参考. 抄写别人网站的同时,N多不同的网站,势必有N多的css.javascript引用文件都会重复引用 ...
- Kubernetes-Secret
1. 简介 Secret 是一种包含少量敏感信息例如密码.令牌或密钥的对象. 这样的信息可能会被放在 Pod 规约中或者镜像中. 使用 Secret 意味着你不需要在应用程序代码中包含机密数据. 由于 ...
- Error building SqlSession. ### The error may exist in dao/UserMapper.xml ### Cause: org.apache.ibatis.builder.BuilderException: Error parsing SQL Mapper Configuration(2 字节的 UTF-8 序列的字节 2 无效。)
关于在学习Mybatis框架时运行报错 Caused by: org.apache.ibatis.exceptions.PersistenceException: ### Error building ...