Gym-101955C题解

题目传送门C - Insertion Sort

不重复题意了,直接写解的过程,场上推不出来,赛后看题解才推出来的

网上题解说存在 k n k\ge n kn的情况,然而我们特判 k + 1 n k+1\ge n k+1n的时候就直接输出 n ! n! n!

特判之后,必定是 k &lt; n 1 k\lt n-1 k<n1

现在来推一下,先不考虑前k项的 k ! k! k!,后面再乘一下就算完了.

1.整一个序列完全有序的情况只有1种

2.当前k个数都是 [ 1 , k ] \left[1,k\right] [1,k]的情况,在后面 n k n-k nk个数里面选一个数,不放在自己的位置上,根据乘法原理,算出来就是 ( n k ) ( n k 1 ) (n-k)*(n-k-1) (nk)(nk1)

3.当前k个数不是 [ 1 , k ] \left[1,k\right] [1,k]的情况下,而你又要保证最长上升子序列的长度是 n 1 n-1 n1,只能是一个完全有序的序列中,你在前k个数中拿一个数插入到 [ k + 1 , n ] \left[k+1,n\right] [k+1,n]的其中一个位置中,有 n k n-k nk种情况,根据乘法原理,算出来就是 ( n k ) k (n-k)*k (nk)k.

最后就是

a n s = { <mstyle displaystyle="false" scriptlevel="0"> n ! , </mstyle> <mstyle displaystyle="false" scriptlevel="0"> <mtext>   </mtext> <mstyle displaystyle="false" scriptlevel="0"> k + 1 n </mstyle> </mstyle> <mstyle displaystyle="false" scriptlevel="0"> k ! ( 1 + ( n k ) ( n k 1 ) + ( n k ) k ) , </mstyle> <mstyle displaystyle="false" scriptlevel="0"> <mstyle displaystyle="false" scriptlevel="0"> 1 k &lt; n 1 </mstyle> </mstyle> ans = \begin{cases} n! , &amp; \text{ $k+1\ge n $}\\ k!*(1+(n-k)*(n-k-1)+(n-k)*k), &amp; \text{$1\le k\lt n-1$} \end{cases} ans={n!,k!(1+(nk)(nk1)+(nk)k), k+1n1k<n1

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-16 12:23
点赞 评论 收藏
分享
流浪的神仙:无恶意,算法一般好像都得9硕才能干算法太卷啦
点赞 评论 收藏
分享
Twilight_m...:经典我朋友XXXX起手,这是那种经典的不知道目前行情搁那儿胡编乱造瞎指导的中年人,不用理这种**
点赞 评论 收藏
分享
昨天 10:39
门头沟学院 Java
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务