P7392 「TOCO Round 1」奇怪的排序 \color{green}{\texttt{P7392 「TOCO Round 1」奇怪的排序}} P7392 「TOCO Round 1」奇怪的排序
[Problem] \color{blue}{\texttt{[Problem]}} [Problem]
询问 n n n 个数的排列中有多少个排列满足执行了下列函数后变成有序。
[Solution] \color{blue}{\texttt{[Solution]}} [Solution]
首先,这个函数就是一个归并排序的模板,只是多了一个参数 k k k。很容易可以知道,这个 k k k 是用来限制递归次数的,即最多只能递归 ( k − 1 ) (k-1) (k−1) 次。
可以发现,递归树最底下一层其实是把原数列分成了 2 k 2^{k} 2k 个子序列。如果我们要满足最后有序,我们必须要保证最底下的那 2 k 2^{k} 2k 个子序列本身是有序的(因为归并的过程不改变原来子序列内部的顺序,只是把相邻两个子序列有序地合并了起来)。
设每个子序列内有 x x x 个数字,那么它本身就是升序的概率就是 1 x ! \dfrac{1}{x!} x!1( x ! x! x! 表示 x x x 的阶乘,下同)。
由于数列是平均分配的,所以最后每个子序列要么有 ⌊ n 2 k