牛客对于题目链接:chika和蜜柑 (nowcoder.com)

一、分析题目
排序 :将每个橘⼦按照甜度由高到低排序,相同甜度的橘子按照酸度由低到高排序, 然后提取排序后的前 k 个橘子就好了。
二、代码
1、看题解之前AC的代码
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N=200010;
struct fruits
{
    LL a;
    LL b;
    static bool cmp(const fruits& x, const fruits& y)
    {
        if(x.b==y.b) return x.a<y.a;
        return x.b>y.b;
    }
}f[N];
int main()
{
    int n, k;
    cin >> n >> k;
    for(int i=0; i<n; i++) cin >> f[i].a;
    for(int i=0; i<n; i++) cin >> f[i].b;
    sort(f, f+n, fruits::cmp);
    LL sum_a=0, sum_b=0;
    for(int i=0; i<k; i++)
    {
        sum_a+=f[i].a;
        sum_b+=f[i].b;
    }
    cout << sum_a << ' ' << sum_b << endl;
 
    return 0;
}2、值得学习的代码
#include <iostream>
#include <algorithm>
using namespace std;
const int N = 2e5 + 10;
typedef pair<int, int> PII; // <酸度,甜度>
PII arr[N];
int n, k;
int main()
{
    cin >> n >> k;
    for(int i = 0; i < n; i++) cin >> arr[i].first;
    for(int i = 0; i < n; i++) cin >> arr[i].second;
 
    sort(arr, arr + n, [&](const PII& a, const PII& b)
    {
        if(a.second != b.second) return a.second > b.second;
        else return a.first < b.first;
    });
 
    long long s = 0, t = 0;
    for(int i = 0; i < k; i++)
    {
        s += arr[i].first;
        t += arr[i].second;
    }
    cout << s << " " << t << endl;
 
    return 0;
}三、反思与改进
思路正确,但对结构体中属性的值进行大小比较不熟悉,导致没有写出正确结果。



















