司机与提货单都在数轴上。将两边分别排序后,最优分配一定是某段连续的 n 张提货单与 n 名司机按坐标顺序一一匹配:交叉匹配只会让最大路程变大。
于是枚举提货单排序后的每个长度为 n 的窗口,计算
1≤i≤nmax(∣ai−bs+i−1∣+∣bs+i−1−p∣)数轴上有 n 名货车司机,第 i 名的初始位置为 ai。码头仓库位于坐标 p。岸边散放着 k 张提货单,第 j 张位于 bj,每张提货单最多被一名司机取走。每名司机必须先到达某张尚未被取走的提货单处取单,再前往仓库。移动 1 单位距离耗时 1。司机可以同时行动,完成时间为所有人到达仓库时刻的最大值。司机初始位置可以与某张提货单重合。求所有人都到达仓库的最短可能时间。
约束:1≤n≤103,n≤k≤2×103,1≤p,ai,bi≤1000000000。
第一行三个整数 n、k 和 p,分别表示司机人数、提货单数量与仓库坐标。 第二行 n 个整数 a1,a2,…,an,表示司机初始位置。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.