前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【第51题】 [NOIP2011 普及组] 瑞士轮,一道归并排序题

【第51题】 [NOIP2011 普及组] 瑞士轮,一道归并排序题

作者头像
小码匠
发布2023-08-31 14:52:50
2150
发布2023-08-31 14:52:50
举报
文章被收录于专栏:小码匠和老码农

题目: [NOIP2011 普及组] 瑞士轮

题目原文请移步下面的链接

  • https://www.luogu.com.cn/problem/P1309
  • 标签:OI模拟递归排序
思路
  • 其基本思路就是按照题目模拟,区分胜者和输者,分区存储,方便下一轮计算,通俗点说就是归并啦,按武力值排序,只不过不是直接排序完,是归并若干次后求值
  • 按照题目进行比较,赢者存入a数组,输的存入b,然后通过merge函数合并两个数组存储于s中,这样循环往复,最后按照目标的索引输出即可
  • 归并排序:直接调用STL库中函数即可
AC代码
代码语言:javascript
复制
#include <bits/stdc++.h>
using namespace std;
#define endl '\n';

void best_coder();
void happy_coder();

int main() {
    // 小码匠
    best_coder();

    // 最优解
    //happy_coder();
    return 0;
}

int cmp(pair<int, int> a, pair<int, int> b) {
    if (a.first == b.first) {
        return a.second < b.second;
    }
    return a.first > b.first;
}

void best_coder() {
    // 提升cin、cout效率
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int n, r, q;
    cin >> n >> r >> q;
    n *= 2;
    vector<pair<int, int>> s(n);
    vector<int> w(n);
    vector<pair<int, int>> a(n / 2);
    vector<pair<int, int>> b(n / 2);

    for (int i = 0; i < n; ++i) {
        cin >> s[i].first;
        s[i].second = i;
    }
    for (int i = 0; i < n; ++i) {
        cin >> w[i];
    }
    sort(s.begin(), s.end(), cmp);
    for (int i = 0; i < r; ++i) {
        for (int j = 0; j < n; j += 2) {
            if (w[s[j].second] > w[s[j + 1].second]) {
                ++s[j].first;
                a[j / 2] = s[j];
                b[j / 2] = s[j + 1];
            } else {
                ++s[j + 1].first;
                a[j / 2] = s[j + 1];
                b[j / 2] = s[j];
            }
        }
        merge(a.begin(), a.end(), b.begin(), b.end(), s.begin(), cmp);
    }
    cout << s[q - 1].second + 1;
}

void happy_coder() {
    // 提升cin、cout效率
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
}

END

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小码匠和老码农 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 思路
  • AC代码
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档