CF-Educational Codeforces Round 83-D-Count the Arrays

时间:2020-03-10 13:47:14   收藏:0   阅读:45

题目传送门

sol:首先我们考虑在一个长度为$n$的序列里只有一个数出现了两次其他数都只出现了一次,那么在序列中出现过的数就有$n - 1$个。而这些数的范围是$[1, m]$,从$[1, m]$里选$n - 1$个不同的数的方案数为$C_{m}^{n - 1}$。这$n - 1$个数里最大的数不能作为出现两次的数,否则就没有峰值了,所以可以作为出现两次的数有$n - 2$个。再考虑这些数的排列,出现两次的数肯定要一个在峰值左边一个在峰值右边,除了出现两次的数和峰值以外还剩$n - 3$个数,这些数可以在峰值左边也可以在峰值右边,所以有$2^{n - 3}$种情况。最终的结果就是$C_{m}^{n - 1}*(n - 2)*(2^{n - 3})$。另外在特判一下$n$是2的情况,如果$n$是2又出现了一对重复的数是没有峰值的,所以结果一定是$0$。

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!