1 条题解
-
0
自动搬运
来自洛谷,原作者为

ETHANK
「我是星 我愿投身前途未卜的群星,为梦长明。」搬运于
2025-08-24 22:34:55,当前版本为作者最后更新于2021-12-26 06:52:44,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
题目难度:USACO P/省选-
不难发现猜 HI 的数不会使猜 LO 的数被跳过。设 ,那么原题相当于将 和 排列,只记录 的每次下标最大值的出现位置,求期望 的数量。
这可以 dp ,设 为当前最大出现 以及最后一个出现的是 ,通过简单的转移可以做到 。前缀和优化可以做到 ,这里不再赘述。
比较吸引我的是在赛后讨论中看到的 做法,这里简单的证明一下。
结论:令 . 有
证明:
或 时结论显然成立,不妨对 归纳。即证 后期望的变化为:
$$\Delta=\frac12(\frac1{y+1}-\frac{1}{N+1}+\frac{y+1}{N+1}-\frac{y}{N})=\frac{1}{2(y+1)}-\frac{y}{2N(N+1)} $$计算对 的排列中插入 对答案的贡献, 只能排在第一个出现的 之前,否则会被跳过。 个 将 个 分成 段,故第一个 前 的期望个数为 个。设前面有 个 。
接下来,只要 被插入在 个 中最大的 前面,都会对期望贡献一个 "ba" 。最大的 的期望位置为:
$$E[index]=\left\{\begin{matrix} \frac{k+1}2,\qquad k>0\\ 0,\qquad k=0\\ \end{matrix}\right. $$即为原排列首项是 的概率,为 。 能得出:
$$\Delta = \frac{1}{N+1}(\frac{1}{2}\times(\frac{x}{y+1}+1)-\frac{y}{N}\times\frac{0+1}{2})\\ =\frac{1}{2(y+1)}-\frac{y}{2N(N+1)} $$const int N=2e5+5,P=1e9+7; int n,x; ll H[N],inv[N]; int main(){ n=read(),x=read(); inv[1]=1; ll fac = 1; rep(i,2,n){ inv[i]=(P-P/i)*inv[P%i]%P; fac = fac*i%P; } rep(i,1,n)H[i]=(H[i-1]+inv[i])%P; int y = n-x; cout<<(fac*inv[2]%P*(inv[n]*y%P+H[x]+H[y]-H[n])%P+P)%P; return 0; }
- 1
信息
- ID
- 7360
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者