题解:P8788 [蓝桥杯 2022 国 A] 填空问题
guoshengyu1231 · · 题解
试题 A :小蓝与钥匙
题目要求让
首先我们要让这
其实这个就是在排列组合中一个非常经典的问题——错排问题。至于怎么做,我们可以从递推的角度出发。
现在我们设函数
如果第一个数坐到了第二个位置,那么第二个数它有以下两种方案:
- 坐到了第一个位置:
\\ 此时便形成了一个闭环,如下图: 因此第一种情况\operatorname{f}(n)=\operatorname{f}(n-2) 。 - 坐到了剩下
n-2 个位置中的一个:\\ 假设此时第2 个数去了第x 个位置,此时我们可以想象成是消除了第二个位置,让第一个数坐到第x 个位置,这里可能有一些难理解,所以我还是给个图吧。 此时问题就变成了n-1 个数的错位排序,因此可得\operatorname{f}(n)=\operatorname{f}(n-1) 。 最后总结公式可得错位排序的计算公式为\operatorname{f}(n)=(n-1)(\operatorname{f}(n-1)+\operatorname{f}(n-2)) 。用程序模拟即可。\\
最后两部分相乘,可得答案为
试题 B:排列距离
这里我们需要引入一个概念——康托展开式,那到底什么是康托展开式呢?比如有一个以
其中
要想高效的算出一个排列的康托展开值,我们可以利用树状数组来求解。这里就不在过多赘述了,大家可以去看看这题:P5367 【模板】康托展开。最终答案显然就等于两个排列的康托展开值的差,答案为