1 条题解
-
0
问题转化
本题可以转化为一个流量调度问题:我们需要将各楼层的初始人数 调整为目标人数 ,通过相邻楼层之间的楼梯移动人员。每个楼梯单位时间只能单向通过一人。
设 ,表示第 层需要净流出的人数(若 则需要向上或向下输出人员,若 则需要输入人员)。
关键观察
-
前缀和性质:定义 ,表示前 层净需求人数。由于总人数守恒,。
-
时间下界:最少需要的时间等于所有前缀和绝对值的最大值:
这个结论的直观理解是: 表示前 层与后 层之间需要交换的人数,这些交换必须通过第 层与第 层之间的楼梯完成。
算法思路
- 计算差值数组
- 计算前缀和
- 答案即为
时间复杂度:,满足 的要求。
正确性证明
考虑任意相邻两层 和 之间的楼梯:
- 如果 ,表示前 层人数过剩,需要向第 层及以后输送 人
- 如果 ,表示前 层人数不足,需要从第 层及以前接收 人
由于每个楼梯单位时间只能单向通过一人,所以至少需要 个单位时间来完成这些人员的流动。对所有 取最大值即得到总时间下界。
样例验证
对于样例:
n = 3 a = [1, 0, 1] b = [0, 2, 0] c = [1, -2, 1] S = [1, -1, 0] max|S| = 1答案为 1,符合样例输出。
-
- 1
信息
- ID
- 3924
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 2
- 已通过
- 1
- 上传者