题解 | #成绩排序#

成绩排序

https://www.nowcoder.com/practice/8e400fd9905747e4acc2aeed7240978b

#include <algorithm>
#include <functional>
#include <tuple>
#include <queue>
#include <string>
#include <utility>
#include <iostream>
#include <vector>
using namespace std;

int main() {
    int a, b;
    auto cc = [&b](const std::tuple<string, int, int>& a1,
    const std::tuple<string, int, int>& b1) {
        if (b) {
            if (std::get<1>(a1) == std::get<1>(b1)) {
                return std::get<2>(a1) > std::get<2>(b1);
            } else {
                return std::get<1>(a1) > std::get<1>(b1);
            }
        } else {
            if (std::get<1>(a1) == std::get<1>(b1)) {
                return std::get<2>(a1) > std::get<2>(b1);
            } else {
                return std::get<1>(a1) < std::get<1>(b1);
            }
        }
    };
    while (cin >> a >> b) { // 注意 while 处理多个 case
        std::priority_queue<std::tuple<string, int, int>, std::vector<std::tuple<string, int, int>>, std::reference_wrapper<decltype(cc)>>
                sets(cc);
        string s;
        int count;
        for (int i = 0; i < a; ++i) {
            cin >> s >> count;
            sets.push(std::make_tuple(s, count, i));
        }
        while (!sets.empty()) {
            auto set1 = sets.top();
            sets.pop();
            cout << std::get<0>(set1) << ' ' << std::get<1>(set1) << endl;
        }

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

stable_sort可以保证顺序,好久没调用都忘了;; make_heap pop_heap讲道理也可以实现

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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