两年前出的题,自己翻出来的时候做了一个小时,菜干净了。
首先由于有不限次数的操作
1,所以我们可以将任意奇偶性相同的数变成同一个数。
于是我们只需要通过最少次数的操作
2 使得所有数的奇偶性相同即可。
首先,我们可以把排列转成 01 序列,所有 01 序列的出现次数显然是相同的。
由于
n 是奇数,所以我们可以唯一确定要把
0 都变成
1,还是把
1 都变成
0,假设是前者,设
m 为
0 的个数。
考虑对相邻的 01 同时加
1 就是交换它们。
考虑如何确定方案最优,显然将其从左到右按次序两两分为一组,相互靠近,所以,对于一种方案,它所使用的代价就是这样两两分组后,每组的两个
0 之间
1 的个数,再加上
2m。
后者容易解决,直接是
2m⋅n!,前者考虑枚举这个
1 的总个数
i,那么相当于要把
i 个
1 放入
2m 个段中,剩下的
n−i−2m 个
1 放入
2m+1 个段中。
设
b=2m,则结果为:
m!⋅(n−m)!⋅∑i=1n−mi⋅(b−1i+b−1)⋅(bn−i−b)
直接算是
O(n) 的,考虑转一下式子,设
S=∑i=1n−mi⋅(b−1i+b−1)⋅(bn−i−b)。
发现
i⋅(b−1i+b−1)=b⋅(bi+b−1) 。
这是一个关键的变换!现在求和式
S 变成了:
S=∑i=1n−mb⋅(bi+b−1)⋅(bn−i−b)
由于
b 是与
i 无关的常数,我们可以将其提到求和符号外面:
S=b⋅∑i=1n−m(bi+b−1)⋅(bn−i−b)
现在我们需要计算这个新的求和式:
S′=∑i=1n−m(bi+b−1)⋅(bn−i−b)
我们采用以下公式:
∑k(ar−k)(bs+k)=(a+b+1r+s+1)
为了套用这个公式,我们对求和式
S′ 进行换元。令
j=i−1,则
i=j+1。当
i 从
1 变化到
n−m 时,
j 从
0 变化到
n−m−1。
S′=∑j=0n−m−1(b(j+1)+b−1)⋅(bn−(j+1)−b)
S′=∑j=0n−m−1(bj+b)⋅(bn−b−1−j)
现在这个形式与恒等式
∑k(bs+k)(ar−k)=(a+b+1r+s+1) 非常接近。
我们来匹配一下参数:
- 求和变量 k→j;
- 第一项:(bj+b) 匹配 (bs+k),可得 s=b;
- 第二项:(b(n−b−1)−j) 匹配 (ar−k),可得 r=n−b−1 和 a=b。
将这些参数代入恒等式的右边:
(a+b+1r+s+1)=(b+b+1(n−b−1)+b+1)=(2b+1n)
因此,我们得到了
S′ 的封闭形式:
S′=(2b+1n)
于是,不难直接算出答案。