只会做一些思博题/ll/ll/ll
HDU7077
定义一个长度为 \(n\) 的序列 \(\{A\}\) 是好的,当且仅当其中最大值为 \(k\),且包含子序列 \(1,2,\dots,k-1,k\)。
给定 \(n\),求好的序列的个数。并且对 \(x\in [1,n]\) 求出 \(x\) 出现的次数。答案对不一定是质数的 \(p\) 取模。
\(1\le n\le 3000,1\le p\le 10^9\)。
枚举最大值为 \(m\)。再枚举子序列 \(1,2,\dots,m-1,m\) 第一次出现时 \(m\) 的位置(枚举到最后一个还有多少个数)。根据经典结论,我们只需控制 \(i-1\) 到 \(i\) 这一段不出现 \(i\) 即可。所以贡献为 \(\sum\limits_{d=0}^{n-m} \binom{n-d-1}{m-1}m^{d}(m-1)^{n-d-m}\),直接 \(O(n^2)\) 计算。
然后考虑最大值为 \(m\) 的序列,每个数出现的概率理应相同,所以次数即为 \(\frac{n}{m}\sum\limits_{d=0}^{n-m} \binom{n-d-1}{m-1}m^{d}(m-1)^{n-d-m}\),由于 \(p\) 不一定是质数不一定存在逆元,所以这个式子还需稍作修改:
\[n\sum_{d=1}^{n-m} \binom{n-d-1}{m-1}m^{d-1}(m-1)^{n-d-m}+\binom{n}{m}(m-1)^{n-m}
\]
于是对 \(\le m\) 的数都加上这个值即可。