好久没写过题解了,模了好长时间的题终于过了,由此写篇题解。
题目链接
题意就不详细说明了。
反思
接下来开始分类讨论。
- 第一种情况也就是最简单的情况先考虑由每个单独
n
n
n元排列而产生的
m
m
m元排列,通俗的讲也就是单独的
n
n
n元排列对答案做出的贡献。
p 1 , p 2 , … , p n p_1,p_2,\dots,p_n p1,p2,…,pn中出现的 p 1 , p 2 , … , p m p_1,p_2,\dots,p_m p1,p2,…,pm
做出的贡献为 m ! ∗ ( n − m + 1 ) ! m!*(n-m+1)! m!∗(n−m+1)!
- 第二种情况比较复杂也很容易想到也就是两个
n
n
n元排列的首尾对答案做出的贡献
下面我们应该分析这个 n n n排列与与下一个 n n n元排列存在这什么恶心关系呢?
最开始是这样一个 n n n元排列 p 1 < p 2 < p 3 < ⋯ < p n p_1<p_2<p_3<\dots<p_n p1<p2<p3<⋯<pn
它最终的形式应该是这样的
p 1 > p 2 > p 3 > ⋯ > p n p_1>p_2>p_3>\dots>p_n p1>p2>p3>⋯>pn
通过打表或者是其他的分析而得(我是打表
在一个 n n n元排列里面存在最后一个 < < <关系的 p k < p k + 1 p_k<p_{k+1} pk<pk+1这个 p k p_k pk要被这个排列从后往前数第一个比它大的数替换然后整体倒着来。
比如一个 n n n元排列是这样的 p 1 < p 2 > p 3 < p 4 < ⋯ < p k < p k + 1 > ⋯ > p j > ⋯ > p n p_1<p_2>p_3<p_4<\dots<p_k<p_{k+1}>\dots>p_j>\dots>p_n p1<p2>p3<p4<⋯<pk<pk+1>⋯>pj>⋯>pn
假设 p j p_j pj是从右往左数第一个比 p k p_k pk大的元素
它的下一个排列必然是
p 1 < p 2 > p 3 < p 4 < ⋯ < p j > p n < p n − 1 < ⋯ < p j + 1 < p k < p j − 1 < ⋯ < p k + 1 p_1<p_2>p_3<p_4<\dots<p_j>p_n<p_{n-1}<\dots<p_{j+1}<p_k<p_{j-1}<\dots<p_{k+1} p1<p2>p3<p4<⋯<pj>pn<pn−1<⋯<pj+1<pk<pj−1<⋯<pk+1
那你肯定有个 p i p_i pi为 m m m元排列的起始点
-
- 再进行分类讨论当
i
≤
k
i\leq k
i≤k时
单独讨论这个排列
p i … p k , p k + 1 , p k + 2 , … , p j , … , p n , p 1 , p 2 … p i + m − 1 − n p_i\dots p_k,p_{k+1},p_{k+2},\dots,p_j,\dots,p_n,p_1,p_2\dots p_{i+m−1−n} pi…pk,pk+1,pk+2,…,pj,…,pn,p1,p2…pi+m−1−n
- 再进行分类讨论当
i
≤
k
i\leq k
i≤k时
-
- 而当 i ≥ ( k + 1 ) i\geq (k+1) i≥(k+1)时
讨论完毕。
最后答案化简得
(
m
−
1
)
∗
m
!
∗
(
n
−
m
)
!
−
m
!
∗
∑
i
=
1
m
−
1
1
i
2
(m-1)*m!*(n-m)!-m!*\sum_{i=1}^{m-1}{1\over{i^2}}
(m−1)∗m!∗(n−m)!−m!∗i=1∑m−1i21