参考程序:
#include <bits/stdc++.h>
using namespace std;
const int N = 2e5 + 5; // 最大支持2n个物品
int n;
long long b[N], c[N], d[N]; // b[]和c[]分别存储小B和小C的报价,d[]存储差值
long long ans; // 最终答案:最大收入
int main() {
scanf("%d", &n); // 读取n
// 读取小B的报价
for (int i = 1; i <= 2 * n; i++) {
scanf("%lld", &b[i]);
}
// 读取小C的报价
for (int i = 1; i <= 2 * n; i++) {
scanf("%lld", &c[i]);
}
// 初步计算所有物品卖给小B的收入
for (int i = 1; i <= 2 * n; i++) {
ans += b[i]; // 初始时所有物品都卖给小B,收入先加上b[i]的部分
d[i] = c[i] - b[i]; // 计算每件物品的差值:c[i] - b[i](差值越大,越倾向于小C)
}
// 按照差值从小到大排序,差值小的物品意味着小B更愿意支付,差值大的物品意味着小C更愿意支付
sort(d + 1, d + 2 * n + 1); // 排序d[]数组
// 对差值数组d进行处理,选择最适合的物品给小B和小C
// 小B默认已经拥有了所有物品,我们需要调整哪些物品卖给小C来优化收入
for (int i = n + 1; i <= 2 * n; i++) { // 从第n+1件开始调整
ans += d[i]; // 收入增加d[i],即卖给小C的物品的额外收入
}
printf("%lld\n", ans); // 输出最大收入
return 0;
}