题目背景

对应的选择、判断题:试题 - 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;
}

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐