题解 | 小苯送礼物

小苯送礼物

https://www.nowcoder.com/practice/466e02d2177845589ab5fa5decc2857f

#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int n, k;
    cin >> n >> k;
    // [
    //     [点赞, 收藏, 粉丝编号]
    //     ....
    // ]
    vector<vector<int>> nums(n + 1, vector<int> (3));

    for (int i = 0; i < n; ++i) {
        cin >> nums[i][0] >> nums[i][1];
        nums[i][2] = i+1;
    }

    sort(nums.begin(), nums.end(),
    [](const auto & a, const auto & b) {

        //收藏点赞相同,按照粉丝编号升序
        if (a[0] == b[0] && a[1] == b[1]) {
            return a[2] < b[2];
        //如不相同,但是支持力度相同,按照收藏降序
        } else if (a[0] + a[1] * 2 == b[0] + b[1] * 2) {
            return a[1] > b[1];
        
        //支持力度也不同,按照支持力度排序
        } else {
            return a[0] + a[1] * 2 > b[0] + b[1] * 2;
        }
        ;
    }
        );

    //取前k个收集进ans数组里,再在ans数组里升序排序输出。
    vector<int> ans(k);
    for (int i = 0; i<k; ++i)
    {
        ans[i] = nums[i][2];
    }
    sort(ans.begin(),ans.end());
    for (int i=0; i<k;++i)
    {
        cout << ans[i] << " ";
    }

}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

2025-12-17 17:53
门头沟学院 Web前端
海梨花:我之前面试也是问我非技术问题,问过我怎么统计北京出租车数量,不借助任何网络或者其他平台的帮助,有足够多的人可以帮忙
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务