题解:AT_abc396_c [ABC396C] Buy Balls

· · 题解

思路:

这题感觉比 D 题难,因为 D 会更模板一点。

这题要使用贪心做法。首先要读入两个数组 ab,然后升序排列两个数组。接下来,如果 a_n + b_n > 0b_n > 0,那么把答案加上 a_n + b_n,并把 nm 都减 1。最后把 a 中还未统计过的数加入答案就行了。

代码:

#import<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,a[200005],b[200005],ans;
main(){
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    cin>>n>>m;
    for(int i=1;i<=n;++i) cin>>a[i];
    for(int i=1;i<=m;++i) cin>>b[i];
    sort(a+1,a+n+1);
    sort(b+1,b+m+1);
    while(n && a[n]+b[m]>0 && b[m]>0) ans+=a[n]+b[m],--n,--m;
    while(n && a[n]>0) ans+=a[n],--n;
    cout<<ans;
}