题目链接
题目大意
现在有一条数轴,数轴上有$n$个点存在垃圾,有个捡垃圾的机器人从$0$号点出发,现在需要将所有垃圾运回$0$号点。
捡起一个垃圾需要消耗$X$能量,当身上有$k$个垃圾时,走一步需要消耗$(k+1)^2$能量。
回到起点倒一次垃圾也需要消耗$X$能量,注意这里倒垃圾时不管身上运载着多少垃圾,消耗能量均为$X$。
$n \le 2*10^5$
做法
感觉上很像$dp+$斜率优化。
但是这题有个非常关键的地方,每次出发所捡的垃圾并不一定相邻。
手动模拟一下,假设一次出发经过了$t_q,t_{q-1},t_{q-2}…t_1$点的话。
所需要的能量就是$X(q+1)+5t_1+5t_2+7t_3+9t_4…$
假设我们一共出发$A$次的话,那么最远的$2A$个点会有$5$的贡献,再近一点的$A$个点有$7$的贡献,再近一点的$A$个点有$9$的贡献,以此类推。
最后再加上倒$A$次垃圾,捡$n$次垃圾的贡献$(A+n)*X$即可。
发现算这个贡献的复杂度其实是调和级数的,我们先预处理一下前缀和,暴力枚举$A$,暴力计算就好了。
代码
1 |
|