在乡村地区,有一条笔直的长路,被称为“稻路”(Rice Way)。这条路上有 $R$ 个稻田。每个稻田都位于 $1$ 到 $L$ 之间(含 $1$ 和 $L$)的整数坐标上。稻田将按坐标非递减的顺序给出。形式化地说,对于 $0 \le i < R$,第 $i$ 个稻田位于坐标 $X[i]$。你可以假设 $1 \le X[0] \le \dots \le X[R-1] \le L$。
请注意,多个稻田可能位于同一个坐标上。
我们计划建造一个单一的“稻米中心”(rice hub)作为公共场所,以尽可能多地储存收获的稻米。与稻田一样,中心也必须位于 $1$ 到 $L$ 之间(含 $1$ 和 $L$)的整数坐标上。稻米中心可以位于任何位置,包括已经包含一个或多个稻田的位置。
每个收获季节,每个稻田都会产出正好 $1$ 车稻米。为了将稻米运送到中心,城市必须雇佣一名卡车司机。司机运输 $1$ 车稻米每单位距离的费用为 $1$ 泰铢。换句话说,将稻米从给定的稻田运送到稻米中心的成本在数值上等于它们坐标之间的差值。
不幸的是,本季我们的预算很紧张:我们在运输上最多只能花费 $B$ 泰铢。你的任务是帮助我们战略性地放置中心,以尽可能多地收集稻米。
题目描述
编写一个过程 besthub(R, L, X, B),它接受以下参数:
- $R$ —— 稻田的数量。稻田编号为 $0$ 到 $R-1$。
- $L$ —— 最大坐标。
- $X$ —— 一个从小到大排序的整数一维数组。对于每个 $0 \le i < R$,第 $i$ 个稻田位于 $X[i]$。
- $B$ —— 预算。
你的过程必须找到一个最优的中心位置,并返回在预算内可以运送到中心的最大稻米车数。
注意,运输稻米的总成本可能非常大。预算是一个 64 位整数,我们建议你在计算中使用 64 位整数。在 C/C++ 中,使用 long long 类型;在 Pascal 中,使用 Int64 类型。
样例
考虑 $R=5, L=20, B=6$ 的情况,且 $X = \{1, 2, 10, 12, 14\}$
稻米中心
对于这种情况,中心有多个最优位置:你可以将其放置在 $10$ 到 $14$ 之间的任何位置(含 $10$ 和 $14$)。上图显示了这些最优位置之一。然后,你将能够从坐标为 $10, 12, 14$ 的稻田运输稻米。对于任何最优的中心位置,此运输的总成本最多为 $6$ 泰铢。显然,没有任何中心位置能让我们从超过三个稻田收集稻米,因此该方案是最优的,besthub 应该返回 $3$。
子任务
子任务 1(17 分)
- $1 \le R \le 100$
- $1 \le L \le 100$
- $0 \le B \le 10\,000$
- 没有两个稻田共享同一个坐标(仅针对此子任务)。
子任务 2(25 分)
- $1 \le R \le 500$
- $1 \le L \le 10\,000$
- $0 \le B \le 1\,000\,000$
子任务 3(26 分)
- $1 \le R \le 5\,000$
- $1 \le L \le 1\,000\,000$
- $0 \le B \le 2\,000\,000\,000$
子任务 4(32 分)
- $1 \le R \le 100\,000$
- $1 \le L \le 1\,000\,000\,000$
- $0 \le B \le 2\,000\,000\,000\,000\,000$
实现细节
- CPU 时间限制:1 秒
- 内存限制:256 MB
- 注意:没有明确的栈内存大小限制。栈内存计入总内存使用量。
交互
- 实现文件夹:
ricehub/ - 由选手实现:
ricehub.c或ricehub.cpp或ricehub.pas - 选手接口:
ricehub.h或ricehub.pas - 样例评测程序:
grader.c或grader.cpp或grader.pas - 样例评测程序输入:
grader.in.1,grader.in.2, ...
注意:样例评测程序按以下格式读取输入:
第 1 行:$R, L$ 和 $B$。
第 2 行至 $R+1$ 行:稻田的坐标;即第 $i+2$ 行包含 $X[i]$,其中 $0 \le i < R$。
第 $R+2$ 行:期望的解。
样例评测程序输入的期望输出:grader.expect.1, grader.expect.2, ...
对于此任务,这些文件中的每一个都应精确包含文本 “Correct.”。