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

Daniel13265
**搬运于
2025-08-24 22:19:29,当前版本为作者最后更新于2020-03-22 22:03:37,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
这是「Daniel13265 的公开赛」的官方题解。
子任务
直接枚举配对的木棍即可。
子任务
设长度为 的木棍的个数为 ,那么 作为最终的木棍长度最多可能出现的次数
$$f_x=\left\lfloor\frac12\sum_{i+j=x}\min\left(b_i,b_j\right)\right\rfloor $$暴力算这个式子即可,算法时间复杂度为 。
子任务
注意到上式中 的 的个数最多只有 个,于是可以将 的 的值统计出来,再用这 个数计算答案。时间复杂度 。
子任务
发现上面的式子很像卷积,只是要计算 的卷积。
于是考虑将上式转化一下,枚举一下小于等于 的数:
$$\begin{aligned}f_x&=\left\lfloor\frac12\sum_{i+j=x}\sum_{k=1}^{n}\left[b_i\geq k\right]\left[b_j\geq k\right]\right\rfloor\\&=\left\lfloor\frac12\sum_{k=1}^{n}\sum_{i+j=x}\left[b_i\geq k\right]\left[b_j\geq k\right]\right\rfloor\end{aligned} $$然后就可以愉快地乘法卷积了~~~
但是,问题在于这么算的时间复杂度是 的。
优化方式也不难:考虑到子任务 的思路,发现对于一个给定的 ,大于 的 的 的个数只有 $\mathcal O\left(\min\left(\dfrac nt,m\right)\right)$ 个,于是小于等于 的部分使用卷积,而大于 的部分直接暴力计算即可。
这个算法的总时间复杂度为 $\mathcal O\left(tm\log m+\left(\dfrac nt\right)^2\right)$ ,当 时有最小值 。实际上,由于卷积部分常数较大,当 小于该值时程序运行效率更高。
- 1
信息
- ID
- 5266
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 6
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者