【NOI 2018】冒泡排序(组合数学)

题意大概是给定一个长度为$n$的排列$p$,求有多少长度为$n$的排列满足冒泡排序的交换次数为$\frac{1}{2} \sum_{i = 1}^{n}|i - p_{i}|$。

可以发现,该式子是冒泡排序复杂度的下界,任意一个数想要回到规定的位置至少要被交换$|i - p_{i}|$次,即在排序过程中不浪费任何一次交换,每一个数都只能向它归回原位的方向走。

稍加思索,可以得出一个结论:

  1. 任何一个最长下降子序列长度超过2的排列一定是不合法的。
  2. 任何一个最长下降子序列不超过2的排列一定合法。

考虑第一句话的正确性:

试想处于中间的那个数,左边存在比它大的数,右边存在比它小的数,那么该数一定会被向左交换一次,也一定会被向右交换一次,然后这两次交换是对该数无意义的,因为它向两个方向走了,导致位置没有改变。所以这两次的交换被浪费,故一定不合法。

考虑第二句话的正确性:

试想一个逆序对,处于右边小的数一定会向左走,如果要使它不合法,必定要令它向右至少走一步,那就意味着右边存在更小的数,与原条件矛盾,对于左边的数同理。

猜你喜欢

转载自www.cnblogs.com/Dance-Of-Faith/p/9339572.html