楼主,我也是这个思路。就是用个pair的结构来存,第一个元素存角标,第二个元素存差,然后排序。按顺序取。这个是AC的代码 #include <iostream> #include <vector> #include <utility> #include <algorithm> using namespace std; bool cmp(pair<int, int> a, pair<int, int> b){     return a.second > b.second; } int main() {     int res = 0;     int n;     cin >> n;     int a, b;     cin >> a >> b;     vector<int> posA;     vector<int> posB;     vector<pair<int, int>> diff;     for(int i = 0; i < n; i++){         int x, y;         cin >> x >> y;         posA.push_back(x);         posB.push_back(y);         diff.push_back(make_pair(i, x > y ? x-y:y-x));     }     sort(diff.begin(), diff.end(),cmp);     for(int i = 0; i < n; i++){         int index = diff[i].first;         if(posA[index] > posB[index] && b > 0){             res += posB[index];             b--;         }else if(posA[index] < posB[index] && a > 0){             res += posA[index];             a--;         }else if(b <= 0){             res += posA[index];             a--;         }else{             res += posB[index];             b--;         }     }     cout<<res;     return 0; }
点赞 评论

相关推荐

牛客热帖

牛客网
牛客企业服务