#P16707. [SEATST 2026] 车辆集结 / Car Gathering

    ID: 16954 Type: RemoteJudge 4000ms 512MiB Tried: 0 Accepted: 0 Difficulty: 7 Uploaded By: Tags>贪心二分交互题Special Judge2026

[SEATST 2026] 车辆集结 / Car Gathering

题目描述

数轴上有 NN 辆汽车,编号从 00 到 N−1N - 1 。给定它们的位置列表 X[0],X[1],…,X[N−1]X[0], X[1], \ldots, X[N - 1] 以及它们每单位的耗油率列表 C[0],C[1],…,C[N−1]C[0], C[1], \ldots, C[N - 1] ,每个列表都已按顺序排序。然而,你不知道哪辆汽车对应哪个位置或哪个耗油率。但你知道每辆汽车都有确切的一个位置和确切的一个耗油率。

也就是说,存在两个长度为 NN 的排列 PP 和 QQ ,使得第 ii 辆汽车位于位置 X[P[i]]X[P[i]] 且其耗油率为 C[Q[i]]C[Q[i]] 。

::::info[什么是长度为 NN 的排列?]{open} 在这道题中,长度为 NN 的排列 PP 是一个长度为 NN 的数组,满足对于所有 0≤i≤N−10 \le i \le N - 1 都有 0≤P[i]≤N−10 \le P[i] \le N - 1 ,并且对于所有 0≤i<j≤N−10 \le i < j \le N - 1 都有 P[i]≠P[j]P[i] \ne P[j] 。

例如,[2,1,0][2, 1, 0] 是一个长度为 33 的排列,但 [1,2,3][1, 2, 3] 和 [2,0,2][2, 0, 2] 不是长度为 33 的排列。 ::::

给定一个特定的分配 (P,Q)(P, Q) ,我们将所有汽车集结在点 yy 的总燃料成本定义为 $\text{cost}(P, Q, y) = \sum_{i=0}^{N-1} |X[P[i]] - y| \times C[Q[i]]$ 。

给定一个 整数 点 pp ,定义在点 pp 的 最坏情况燃料成本 为所有可能的分配 (P,Q)(P, Q) 下的最大总燃料成本。也就是说,定义 $\text{worst}(p) = \max \limits_{P, Q} \text{cost}(P, Q, p)$ 。

你的任务是找一个整数点 pp ,使得在点 pp 的最坏情况燃料成本 worst(p)\text{worst}(p) 最小化。如果有多个点 pp 都能达到相同的 worst(p)\text{worst}(p) 最小值,你可以返回其中任意一个。

实现详情

你需要实现以下函数。

int car_gathering(int N, std::vector<int> X, std::vector<int> C)
  • NN :汽车的数量。
  • XX :一个长度为 NN 的数组,描述了按顺序排序的汽车位置。
  • CC :一个长度为 NN 的数组,描述了按顺序排序的汽车油耗率。
  • 对于每个测试数据,此函数恰好被调用一次。
  • 此函数应返回一个整数 pp ,使得在所有整点中,将所有汽车集结在 pp 点的最坏情况燃料成本最小。

输入格式

N
X[0] X[1] ... X[N - 1]
C[0] C[1] ... C[N - 1]

输出格式

一个整数,表示 car_gathering 的返回值。

提示

样例

考虑以下函数调用:

car_gathering(3, [-1, 2, 3], [1, 1, 2])

假设 p=1p = 1 。可以证明,分配 P=[0,1,2]P = [0, 1, 2] 和 Q=[2,1,0]Q = [2, 1, 0] 会产生 最坏情况燃料成本 。也就是说, $\text{worst}(p) = \text{cost}(P, Q, p) = (|-1 - 1| \times 2) + (|2 - 1| \times 1) + (|3 - 1| \times 1) = 7$ 。请注意,可能还有其他 PP 和 QQ 的分配方式也能产生 最坏情况燃料成本 ,例如 P=[2,1,0]P = [2, 1, 0] 和 Q=[2,1,0]Q = [2, 1, 0] 。

同时也可以证明,整数点 p=1p = 1 是导致 worst(p)\text{worst}(p) 最小值的点。因此,该函数调用该返回 1。

约束

  • 1≤N≤10 000 0001 \le N \le 10\ 000\ 000 。
  • 对于所有 0≤i≤N−10 \le i \le N - 1 , −109≤X[i]≤109-10^9 \le X[i] \le 10^9 。
  • 对于所有 0≤i≤N−10 \le i \le N - 1 , 0≤C[i]≤1000 \le C[i] \le 100 。
  • 对于所有 0≤i<j≤N−10 \le i < j \le N - 1 , X[i]≤X[j]X[i] \le X[j] 。
  • 对于所有 0≤i<j≤N−10 \le i < j \le N - 1 , C[i]≤C[j]C[i] \le C[j] 。

子任务

  1. (1010 分) N≤1000N \le 1000 , ∣X[i]∣≤103|X[i]| \le 10^3 。
  2. (2323 分) N≤100 000N \le 100\ 000 。
  3. (1717 分) N≤1 000 000N \le 1\ 000\ 000 。
  4. (3131 分) 对于所有 0≤i≤N−10 \le i \le N - 1 , C[i]≤1C[i] \le 1 。
  5. (1919 分) 没有额外的约束。