本文主要是介绍【编程题-错题集】chika 和蜜柑(排序 / topK),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
牛客对于题目链接: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;
}
三、反思与改进
思路正确,但对结构体中属性的值进行大小比较不熟悉,导致没有写出正确结果。
这篇关于【编程题-错题集】chika 和蜜柑(排序 / topK)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!