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