n个人只选k个送礼物。排序标准是先降序排列支持力度,再降序排列收藏数,再升序排列编号

选择结构体数组,加上自定义sort即可解题

#include <algorithm> // 调用sort
#include <iostream>
#include <vector>
using namespace std;

struct Fans{
    int num;
    int stars;
    int support;
};

int main() {
    int n, k;
    cin >> n >> k;
    vector<Fans> s(n);
    for (int i = 0; i < n; i++) {
        s[i].num = i;
        int like;
        cin >>like >> s[i].stars;
        s[i].support = like + 2 * s[i].stars;
        // cout << s[i].num << " " << s[i].stars << " " << s[i].support << '\n';
    }
    sort(s.begin(), s.end(), [](const Fans &a, const Fans &b){
        if (a.support != b.support) {
            return a.support > b.support;
        }
        else {
            if (a.stars != b.stars) {
                return a.stars > b.stars;
            }
            else {
                return a.num < b.num;
            }
        }
    });

    vector<Fans> s2;
    for (int i = 0; i < k; i++) {
       s2.push_back(s[i]);
    }
    sort(s2.begin(), s2.end(), [](const Fans &a, const Fans &b){
        return a.num < b.num;
    });
    for (int i = 0; i < s2.size(); i++) {
       cout << s2[i].num + 1 << " ";
    }
}

立花泷祝看到这里的牛油们新年快乐!万事顺遂!