| “华为杯”2025 年广东工业大学 ACM 程序设计竞赛 |
|---|
| Finished |
伍六七的理发店里突然来了一群 Capoo!但由于已经是下班时间所以 Capoo 们打算第二天再来。
然而,Capoo 们的起床时间有所不同,于是一番商量后,领头的 Capoo 递来了一张预约表,上面写着第 $$$i$$$ 只 Capoo 的预约时间为 $$$t_i$$$。
但是 Capoo 实在是太多了!为了应对如此多的 Capoo,伍六七不得不找到隔壁的杀马特协商,经过研究后他们决定将这 $$$n$$$ 只排队的 Capoo 从中间划分成连续的两部分(可以为空)$$$\dagger$$$,前半部分由杀马特负责,后半部分由伍六七负责,而他们给 Capoo 理发所需时间都为 $$$k$$$,这意味着,若伍六七/杀马特在第 $$$l$$$ 秒开始给 Capoo 理发,则他在 $$$[l,l+k)$$$ 这段时间内都在给这只 Capoo 理发而不能给其他 Capoo 理发。如果某只 Capoo 来的时候若伍六七/杀马特正在给其它 Capoo 理发,那它就只好排队等候直到轮到它理发。
现在问题是如何确定一个最佳的划分,使得所有 Capoo 的等待时间之和最小——这里对于第 $$$i$$$ 只 Capoo,它的等待时间为 $$$(\text{开始理发时间} - \text{到达时间})$$$。
为了集思广益,塑料把这道题丢到了校赛里,并期待你给出一个最佳的划分,而你只需要输出最小的等待时间之和,这样塑料就不需要写 spj 了 OuO
$$$\dagger$$$ 对于队列 $$$[1,2,3,4,5]$$$,可能的划分为:$$$[1,2]$$$ 和 $$$[3,4,5]$$$、$$$[1,2,3,4,5]$$$ 和 $$$[]$$$;不允许的划分:$$$[1,2,4]$$$ 和 $$$[3,5]$$$,因为元素在原数组中不连续。
本题有多组测试数据。
第一行输入一个正整数 $$$T$$$ ($$$1 \leq T \leq 2\times 10^4$$$),表示有 $$$T$$$ 组样例;
接下来对于每组测试样例:
第一行输入两个正整数 $$$n$$$ ($$$1 \leq n\leq 2 \times 10^5$$$) 和 $$$k$$$ ($$$1 \leq k \leq 10^8$$$),表示 Capoo 的数量和给某只 Capoo 理发所需时间;
第二行输入 $$$n$$$ 个正整数,其中第 $$$i$$$ 个数表示第 $$$i$$$ 只 Capoo 的预约时间 $$$t_i$$$ ($$$1 \leq t_i \leq 10^8$$$)。
保证所有测试样例的 $$$n$$$ 之和不超过 $$$5 \times 10^5$$$。
对于每组测试样例,输出一行一个正整数 $$$w$$$,表示最小等待时间之和。
33 51 1 45 44 1 7 2 66 31 1 1 1 1 1
2 3 18
26 5780 60 27 22 71 669 6913 18 16 32 44 27 24 15 12
163 1015
对于第一个样例组的第二组测试样例:
如果选择将序列划分为 $$$[1,4)$$$ 和 $$$[4,5]$$$,则等待时间计算如下:
对于杀马特负责的部分,
$$$t=1$$$ 时编号为 $$$2$$$ 的 Capoo 到达,杀马特开始为其理发;
$$$t=4$$$ 时编号为 $$$1$$$ 的 Capoo 到达,但此时杀马特还在为编号为 $$$2$$$ 的 Capoo 理发,需要排队等到 $$$t=5$$$ 时才轮到它;
$$$t=7$$$ 时编号为 $$$3$$$ 的 Capoo 到达,但此时杀马特还在为编号为 $$$1$$$ 的 Capoo 理发,需要排队等到 $$$t=9$$$ 时才轮到它。
故这三只 Capoo 的等待时间之和为 $$$1+2=3$$$,而伍六七负责的两只 Capoo 均不需要等待,故总等待时间为 $$$3+0=3$$$。
可以证明不存在更优的方案。
| Name |
|---|


