个人向题解
思路在注释上
// https://www.bilibili.com/video/BV1MG411z7Yz/?spm_id_from=333.999.0.0&vd_source=d0319d94edfd26259a11eeed2b2f9fc3 // 贪心 // 题目要求两个人的推理能力之和 与 阅读能力之和 // 以 a-b 的绝对值为依据进行排序 #include <bits/stdc++.h> using namespace std; int t,n,m; void solve() { cin>>n; vector<pair<int,int>> a; for(int i=0;i<n;i++) { int x,y; cin>>x>>y; a.push_back({x,y}); } // 按差值绝对值排序 sort(a.begin(),a.end(),[](const pair<int,int>&a, const pair<int,int>&b){return abs(a.first-a.second) < abs(b.first-b.second);}); int max1=a[0].first,max2=a[0].second;//差值绝对值 <= 当前这个人的差值绝对值的 那些人的 最大推理能力 以及 最大阅读能力 int ans=0; for(int i=1;i<n;i++) { if(a[i].first<=a[i].second)//当前这个人推理能力不如阅读能力 {//那么他和某个人(排他前面的人)的推理能力之和 一定小于 阅读能力之和 ans=max(ans,a[i].first+max1); } else {// 当前这个人推理能力更强 //那么他和某个人(排他前面的人)的推理能力之和 一定大于 阅读能力之和 ans=max(ans,a[i].second+max2); } max1=max(max1,a[i].first);//更新前i个人里面的最大推理能力 以及 最大阅读能力 max2=max(max2,a[i].second); } printf("%.1f\n",ans/2.0); } int main() { solve(); }