Insertion Sort ICPC 2018 Shenyang R

[ICPC 2018 Shenyang R] Insertion Sort

题目链接: [ICPC 2018 Shenyang R] Insertion Sort 。

题目描述(简化版):

经过原题面转化。

给定 n,k,Pn,k,P ,求所有长度 nn 的排列中,将前 kk 个排好序之后最长上升子序列至少为 n−1n-1 的方案数。对 PP 取模。

首先考虑前 kk 个的分布。

Case #1

前 kk 个数恰为 1∼k1\sim k 。

此时只需后面 k+1∼nk+1\sim n 的最长上升子序列至少 n−k−1n-k-1 即可。

易知方案数为 k!×((n−k−1)2+1)k!\times ((n-k-1)^2+1) 。

Case #2

前 kk 个数恰为 1∼k+11\sim k+1 中 kk 个(不包括 Case #1 )。

此时只需后面 k+2∼nk+2\sim n 有序。

所以此时我们需要将前 kk 个位置的数乱序,并枚举 1∼k1\sim k 中谁不在前 kk 个位置中。这个枚举的数可以放在 k+1∼nk+1\sim n 中任意位置。所以方案数为 k!×k(n−k)k!\times k(n-k) 。

Case #3

前 kk 个数恰为 1∼k1\sim k 剔除一个并加入 k+2∼nk+2\sim n 中任意一个。

此时前面随意排序,后面必须有序。

于是方案数为 k!(n−k−1)k!(n-k-1) 。

然后就没了。