Borcsa 有两个数组,每个数组包含 $N$ 个非负整数。
第一个数组中的数为 $A[0], A[1], \dots, A[N - 1]$,第二个数组中的数为 $B[0], B[1], \dots, B[N - 1]$。两个数组中的数都是升序排列的,即:
- $A[0] \le A[1] \le \dots \le A[N - 1]$,且
- $B[0] \le B[1] \le \dots \le B[N - 1]$。
Borcsa 非常喜欢算术加法,因此对于 $0$ 到 $N - 1$ 之间的每个 $i$ 以及 $0$ 到 $N - 1$ 之间的每个 $j$(均包含端点),她都计算了和 $A[i] + B[j]$。
设数组 $C$ 包含 Borcsa 计算的所有 $N^2$ 个和,并按升序排序。你的任务是求出 $C$ 中的前 $N$ 个值。
实现细节
你应当实现以下函数:
int[] smallest_sums(int N, int[] A, int[] B)
N:每个数组中的元素个数。A,B:长度为 $N$ 的数组,包含按升序排序的非负整数。- 该函数应当返回一个长度为 $N$ 的数组,包含通过将 $A$ 中的一个元素与 $B$ 中的一个元素相加得到的最小的 $N$ 个和。返回的数组应按升序包含这些和。
- 对于每个测试用例,该函数恰好被调用一次。
样例
输入样例 1
2 0 2 1 4
输出样例 1
1 3
说明 1
考虑以下调用:
smallest_sums(2, [0, 2], [1, 4])
在这种情况下,$N = 2$。Borcsa 计算了 $N^2 = 4$ 个和:
- $0 + 1 = 1$
- $0 + 4 = 4$
- $2 + 1 = 3$
- $2 + 4 = 6$
数组 $C$ 包含这些按升序排序的和,即 $C = [1, 3, 4, 6]$。$C$ 中最小的 $N = 2$ 个元素是 $1$ 和 $3$。因此,该函数应该返回数组 [1, 3]。
输入样例 2
3 0 2 2 3 5 6
输出样例 2
3 5 5
说明 2
考虑以下调用:
smallest_sums(3, [0, 2, 2], [3, 5, 6])
这 9 个两两相加的和(按升序排序)为 $3, 5, 5, 5, 6, 7, 7, 8, 8$。该函数应该返回最小的 3 个和,即数组 [3, 5, 5]。
数据范围
- $1 \le N \le 100\,000$
- $0 \le A[i] \le 10^9$(对于满足 $0 \le i < N$ 的每个 $i$)
- $0 \le B[j] \le 10^9$(对于满足 $0 \le j < N$ 的每个 $j$)
- $A$ 和 $B$ 按升序排序。
子任务
- (10 分)$N = 1$
- (20 分)$N \le 100$
- (30 分)$N \le 2\,500$
- (40 分)无附加限制。
评测程序示例
评测程序示例按以下格式读取输入:
- 第 1 行:$N$
- 第 2 行:$A[0]\ A[1]\ \dots\ A[N - 1]$
- 第 3 行:$B[0]\ B[1]\ \dots\ B[N - 1]$
对于某个非负整数 $n$,设 smallest_sums 返回的数组元素为 $c[0], c[1], \dots, c[n - 1]$。评测程序示例的输出格式如下:
- 第 1 行:$c[0]\ c[1]\ \dots\ c[n - 1]$