《P11960 [GESP202503 五级] 平均分配》
·
题目背景
对应的选择、判断题:试题 - GESP 202503 C++ 五级 - 洛谷有题
题目描述
小 A 有 2n 件物品,小 B 和小 C 想从小 A 手上买走这些物品。对于第 i 件物品,小 B 会以 bi 的价格购买,而小 C 会以 ci 的价格购买。为了平均分配这 2n 件物品,小 A 决定小 B 和小 C 各自只能买走恰好 n 件物品。你能帮小 A 求出他卖出这 2n 件物品所能获得的最大收入吗?
输入格式
第一行,一个正整数 n。
第二行,2n 个整数 b1,b2,…,b2n。
第三行,2n 个整数 c1,c2,…,c2n。
输出格式
一行,一个整数,表示答案。
输入输出样例
输入 #1复制
3 1 3 5 6 8 10 2 4 6 7 9 11
输出 #1复制
36
输入 #2复制
2 6 7 9 9 1 2 10 12
输出 #2复制
35
说明/提示
数据范围
对于 20% 的测试点,保证 1≤n≤8。
对于另外 20% 的测试点,保证 0≤bi≤1,0≤ci≤1。
对于所有测试点,保证 1≤n≤105,0≤bi≤109,0≤ci≤109。
代码实现:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
typedef long long ll;
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin>>n;
int len=2*n;
vector<ll> b(len),c(len),d(len);
for(int i=0;i<len;i++) cin>>b[i];
for(int i=0;i<len;i++) cin>>c[i];
vector<pair<ll,int>> item(len);
for(int i=0;i<len;i++)
{
item[i]={b[i]-c[i],i};
}
sort(item.rbegin(),item.rend());
ll ans=0;
for(int i=0;i<len;i++)
{
int pos=item[i].second;
if(i<n) ans+=b[pos];
else ans+=c[pos];
}
cout<<ans<<'\n';
return 0;
}
更多推荐

所有评论(0)