楼主,我也是这个思路。就是用个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;
}