'commit'
This commit is contained in:
36
GESP/Level5/GESP202503/T1.cpp
Normal file
36
GESP/Level5/GESP202503/T1.cpp
Normal file
@@ -0,0 +1,36 @@
|
||||
#include <bits/stdc++.h>
|
||||
using namespace std;
|
||||
const int N = 2e5 + 10;
|
||||
typedef long long LL;
|
||||
int n;
|
||||
LL b[N], c[N], d[N];
|
||||
/*
|
||||
关键点解释:
|
||||
差价数组 d 的排序是升序排列,所以后 n 个元素是最大的
|
||||
通过选择最大的 n 个差价,确保我们最大化改卖给小 C 带来的收益提升
|
||||
最终总收益 = 全选小 B 的收益 + 最优的 n 个改卖带来的收益提升
|
||||
*/
|
||||
LL ans;
|
||||
int main() {
|
||||
freopen("T1.in", "r", stdin);
|
||||
cin >> n;
|
||||
for (int i = 1; i <= 2 * n; i++)
|
||||
cin >> b[i];
|
||||
for (int i = 1; i <= 2 * n; i++)
|
||||
cin >> c[i];
|
||||
|
||||
// 初始化为全选小 B 的总收入
|
||||
for (int i = 1; i <= 2 * n; i++)
|
||||
ans += b[i];
|
||||
|
||||
// 计算每个物品改卖给小 C 的差价
|
||||
for (int i = 1; i <= 2 * n; i++)
|
||||
d[i] = c[i] - b[i];
|
||||
|
||||
// 排序后取最大的 n 个差价(排序后后半段是最大的)
|
||||
sort(d + 1, d + 2 * n + 1);
|
||||
for (int i = n + 1; i <= 2 * n; i++)
|
||||
ans += d[i];
|
||||
cout << ans << endl;
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user