CCF-GESP计算机学会等级考试2025年3月五级C++T1 平均分配
·
P11960 [GESP202503 五级] 平均分配
题目描述
小 A 有 2n2n2n 件物品,小 B 和小 C 想从小 A 手上买走这些物品。对于第 iii 件物品,小 B 会以 bib_ibi 的价格购买,而小 C 会以 cic_ici 的价格购买。为了平均分配这 2n2n2n 件物品,小 A 决定小 B 和小 C 各自只能买走恰好 nnn 件物品。你能帮小 A 求出他卖出这 2n2n2n 件物品所能获得的最大收入吗?
输入格式
第一行,一个正整数 nnn。
第二行,2n2n2n 个整数 b1,b2,…,b2nb_1,b_2,\dots,b_{2n}b1,b2,…,b2n。
第三行,2n2n2n 个整数 c1,c2,…,c2nc_1,c_2,\dots,c_{2n}c1,c2,…,c2n。
输出格式
一行,一个整数,表示答案。
输入输出样例 #1
输入 #1
3
1 3 5 6 8 10
2 4 6 7 9 11
输出 #1
36
输入输出样例 #2
输入 #2
2
6 7 9 9
1 2 10 12
输出 #2
35
说明/提示
数据范围
对于 20%20\%20% 的测试点,保证 1≤n≤81\le n\le81≤n≤8。
对于另外 20%20\%20% 的测试点,保证 0≤bi≤10\le b_i\le10≤bi≤1,0≤ci≤10\le c_i\le10≤ci≤1。
对于所有测试点,保证 1≤n≤1051\le n\le10^51≤n≤105,0≤bi≤1090\le b_i\le10^90≤bi≤109,0≤ci≤1090\le c_i\le10^90≤ci≤109。
解析
贪心策略,把价差小的卖给小B,价差大的卖给小C,详见代码:
#include<bits/stdc++.h>
using namespace std;
int n;
struct node {//每款商品的两种售价
int b, c;
};
node a[200005];
long long ans = 0;
bool cmp(node x, node y) {//按价差从小到大排序
return x.c - x.b < y.c - y.b;
}
int main() {
cin >> n;//输入
for(int i = 1; i <= n * 2; i++) {
cin >> a[i].b;
}
for(int i = 1; i <= n * 2; i++) {
cin >> a[i].c;
}
sort(a + 1, a + 2 * n + 1, cmp);//排序
for(int i = 1; i <= 2 * n; i++) {//遍历每个商品
if (i <= n) {//前n个价差小的卖给小B
ans += a[i].b;
} else {//其他的卖给小C
ans += a[i].c;
}
}
cout << ans;
return 0;
}
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)