第一轮

第一版(0/10)

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

struct Fans{
    int id;
    int like;
    int star;
    int support;
}; 

int main() {
    int n, k;
    cin >> n >> k;

    vector<Fans> fans(n);
    for(int i = 0; i < n; i++){
        cin >> fans[i].like >> fans[i].star;
        fans[i].id = i + 1;
        fans[i].support = fans[i].like + fans[i].star * 2;
    }

    sort(fans.begin(), fans.end(), [](const Fans& a, const Fans& b){
        if(a.support != b.support) return a.support > b.support;
        else return a.id < b.id;
    });

    for(int i = 0; i < k; i++){
        cout << fans[i].id;
    }

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

  1. 重读题目,认为错在排序逻辑少了一路——支持度一样,收藏高的优先;支持和收藏都一样,编号小的优先。

第二版(0/10)

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

struct Fans{
    int id;
    int like;
    int star;
    int support;
}; 

int main() {
    int n, k;
    cin >> n >> k;

    vector<Fans> fans(n);
    for(int i = 0; i < n; i++){
        cin >> fans[i].like >> fans[i].star;
        fans[i].id = i + 1;
        fans[i].support = fans[i].like + fans[i].star * 2;
    }

    sort(fans.begin(), fans.end(), [](const Fans& a, const Fans& b){
        if(a.support != b.support) return a.support > b.support;
        else if (a.star != b.star) {
            return a.star > b.star;
        }else return a.id < b.id;
    });

    for(int i = 0; i < k; i++){
        cout << fans[i].id;
    }

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

  1. 在读题目,发现输出逻辑搞错了——输出要求严格按照id排序。

第三版(0/10)

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

struct Fans{
    int id;
    int like;
    int star;
    int support;
}; 

int main() {
    int n, k;
    cin >> n >> k;

    vector<Fans> fans(n);
    for(int i = 0; i < n; i++){
        cin >> fans[i].like >> fans[i].star;
        fans[i].id = i + 1;
        fans[i].support = fans[i].like + fans[i].star * 2;
    }

    sort(fans.begin(), fans.end(), [](const Fans& a, const Fans& b){
        if(a.support != b.support) return a.support > b.support;
        else if (a.star != b.star) {
            return a.star > b.star;
        }else return a.id < b.id;
    });

    vector<Fans> fans_k(n);
    for(int i = 0; i < k; i++){
        fans_k[i] = fans[i];
    }

    sort(fans_k.begin(), fans_k.end(), [](const Fans& a, const Fans& b){
        return a.id < b.id;
    });    

    for(int i = 0; i < k; i++){
        cout << fans_k[i].id;
    }
}
// 64 位输出请用 printf("%lld")

第四版(AC)

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

struct Fans{
    int id;
    int like;
    int star;
    int support;
}; 

int main() {
    int n, k;
    cin >> n >> k;

    vector<Fans> fans(n);
    for(int i = 0; i < n; i++){
        cin >> fans[i].like >> fans[i].star;
        fans[i].id = i + 1;
        fans[i].support = fans[i].like + fans[i].star * 2;
    }

    sort(fans.begin(), fans.end(), [](const Fans& a, const Fans& b){
        if(a.support != b.support) return a.support > b.support;
        else if (a.star != b.star) {
            return a.star > b.star;
        }else return a.id < b.id;
    });

    vector<Fans> fans_k(k);
    for(int i = 0; i < k; i++){
        fans_k[i] = fans[i];
    }

    sort(fans_k.begin(), fans_k.end(), [](const Fans& a, const Fans& b){
        return a.id < b.id;
    });    

    for(int i = 0; i < k; i++){
        if(i > 0) cout << " "; 
        cout << fans_k[i].id;
    }
}
// 64 位输出请用 printf("%lld")

  1. 改了一下fans_k的初始大小。
  2. 最关键的改动是输出格式。
  3. 注意这题只需要输出id,所以没必要声明一个vector<Fans>类型,直接声明一个vecor<int>即可。