在线机考|2024华为实习秋招春招编程题(最新)——第1题_拔河比赛队员选拔_100分(八)

题目内容

某团队近期需要组织一支队伍参加拔河比赛,团队共有队员n人,比赛队员人数要求为m人,n>m,n个队员按编号,1到n的顺序参加k轮力量测试,每轮的测试成绩用正整数表示。

根据n个队员的力量测试成绩选择比赛队员m人,先选择k轮测试中最好成绩最大的队员,若有多人的最好成绩相等,则优先选择其中第二好成绩最大的队员,依次类推,最后若还有相等的情况,则优先选择编号较小的队员。每个人只能被选择一次。

输入描述

第1行,团队队员总数n,比赛队员要求的人数m,力量测试轮数k

第i+1行 (i从1到n),第i个队员参与力量测试第1~k轮的测试成绩,每轮成绩用空格分隔

n,m和k均为正整数,0<m<n<=10^3;0<k<=10^3,0<每轮测试成绩<=10^5

输出描述

按上述选择顺序选出的比赛队员编号的列表,用空格分隔

样例

输入:

4 3 3
10 12 14
11 12 13
12 15 10
12 11 13
输出:

3 1 2

解题思路

本题的关键在于对队员进行多维度的排序,以确保按照规定的优先级正确选出比赛队员。首先,对每位队员的k轮测试成绩进行降序排序,确保每个队员的成绩从高到低排列。然后,按照每位队员排序后的成绩列表逐项进行比较,优先选择在各个成绩项上表现更优的队员。如果在所有成绩项上都相同,则优先选择编号较小的队员。通过这种多关键字排序的方法,可以有效地从n名队员中筛选出符合要求的m名比赛队员,保证选择过程符合题目要求的优先级规则。

  1. 数据预处理:对于每个队员,将其k轮测试成绩排序,降序排列。这样每个队员的成绩列表从最好到最差。
  2. 排序比较:按照以下优先级对所有队员进行排序:
  • 首先比较每个队员的第一个成绩(最好成绩),成绩高者优先。
  • 若第一成绩相同,则比较第二个成绩,成绩高者优先。
  • 依此类推,直到所有k个成绩都比较完。
  • 若所有成绩都相同,则编号小的队员优先。
  1. 选择队员:排序完成后,选择前m个队员的编号作为比赛队员。

编程实现

C++

#include <bits/stdc++.h>
using namespace std;

// 定义队员结构体
struct Player {
    int id; // 队员编号
    vector<int> scores; // 排序后的成绩列表
};

// 自定义比较函数
bool comparePlayers(const Player &a, const Player &b) {
    // 比较每个成绩
    for(int i = 0; i < a.scores.size(); ++i){
        if(a.scores[i] != b.scores[i]){
            return a.scores[i] > b.scores[i]; // 成绩高者优先
        }
    }
    // 成绩完全相同,比较编号
    return a.id < b.id;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int n, m, k;
    cin >> n >> m >> k; // 输入n, m, k
    vector<Player> players(n);
    for(int i = 0; i < n; ++i){
        players[i].id = i + 1; // 编号从1开始
        players[i].scores.resize(k);
        for(int j = 0; j < k; ++j){
            cin >> players[i].scores[j]; // 输入每轮成绩
        }
        // 将成绩排序降序
        sort(players[i].scores.begin(), players[i].scores.end(), greater<int>());
    }
    // 对所有队员排序
    sort(players.begin(), players.end(), comparePlayers);
    // 输出前m个队员的编号
    for(int i = 0; i < m; ++i){
        if(i > 0) cout << ' ';
        cout << players[i].id;
    }
    return 0;
}

Python

# 定义队员类
class Player:
    def __init__(self, id, scores):
        self.id = id
        # 排序成绩降序
        self.scores = sorted(scores, reverse=True)
    
    # 定义比较函数
    def __lt__(self, other):
        for a, b in zip(self.scores, other.scores):
            if a != b:
                return a > b
        return self.id < other.id

def main():
    import sys
    input = sys.stdin.read
    data = input().split()
    idx = 0
    n, m, k = map(int, data[idx:idx+3])
    idx +=3
    players = []
    for i in range(1, n+1):
        scores = list(map(int, data[idx:idx+k]))
        idx +=k
        player = Player(i, scores)
        players.append(player)
    # 排序
    players.sort()
    # 输出前m个队员的编号
    selected = [str(player.id) for player in players[:m]]
    print(' '.join(selected))

if __name__ == "__main__":
    main()

Java

import java.util.*;
import java.io.*;

public class Main {
    // 定义队员类
    static class Player implements Comparable<Player>{
        int id;
        List<Integer> scores;
        
        Player(int id, List<Integer> scores){
            this.id = id;
            // 排序降序
            Collections.sort(this.scores = scores, Collections.reverseOrder());
        }
        
        @Override
        public int compareTo(Player other){
            for(int i = 0; i < this.scores.size(); i++){
                if(!this.scores.get(i).equals(other.scores.get(i))){
                    return other.scores.get(i) - this.scores.get(i); // 降序
                }
            }
            return this.id - other.id; // 编号升序
        }
    }
    
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String[] first = br.readLine().trim().split("\\s+");
        int n = Integer.parseInt(first[0]);
        int m = Integer.parseInt(first[1]);
        int k = Integer.parseInt(first[2]);
        List<Player> players = new ArrayList<>();
        for(int i=1; i<=n; i++){
            String[] line = br.readLine().trim().split("\\s+");
            List<Integer> scores = new ArrayList<>();
            for(int j=0; j<k; j++) scores.add(Integer.parseInt(line[j]));
            players.add(new Player(i, scores));
        }
        // 排序
        Collections.sort(players);
        // 输出前m个队员的编号
        StringBuilder sb = new StringBuilder();
        for(int i=0; i<m; i++){
            if(i >0) sb.append(' ');
            sb.append(players.get(i).id);
        }
        System.out.println(sb.toString());
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/946977.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

AI大模型系列之七:Transformer架构讲解

目录 Transformer网络是什么&#xff1f; 输入模块结构&#xff1a; 编码器模块结构&#xff1a; 解码器模块: 输出模块结构&#xff1a; Transformer 具体是如何工作的&#xff1f; Transformer核心思想是什么&#xff1f; Transformer的代码架构 自注意力机制是什么…

家政预约小程序05活动管理

目录 1 搭建活动管理页面2 搭建活动规则页面3 搭建规则新增页面3 配置规则跳转4 搭建活动参与记录总结 上一篇我们介绍了活动管理的表结构设计&#xff0c;本篇我们介绍一下后台功能。 1 搭建活动管理页面 我们一共搭建了三个表&#xff0c;先搭建主表的后台功能。打开我们的后…

SpringCloud(二)--SpringCloud服务注册与发现

一. 引言 ​ 前文简单介绍了SpringCloud的基本简介与特征&#xff0c;接下来介绍每个组成部分的功能以及经常使用的中间件。本文仅为学习所用&#xff0c;联系侵删。 二. SpringCloud概述 2.1 定义 ​ Spring Cloud是一系列框架的有序集合&#xff0c;它巧妙地利用了Spring…

当生成式AI遇见数字孪生

吴付标 总部位于美国宾夕法尼亚州的Bentley软件公司&#xff0c;于金秋十月在枫叶之国加拿大名城温哥华举办一年一度的2024纵览基础设施大会暨光辉大奖赛。此次盛会吸引了来自全球的数百位行业精英&#xff0c;旨在探讨基础设施数智化的最新趋势&#xff0c;分享生态圈的创新成…

散度与旋度的探讨

一、散度的定义与物理意义 1. 散度的定义 散度(Divergence)是向量分析中的一个核心概念,用于描述一个向量场在某一点的源或汇的强度。在数学上,散度通常使用符号“div”表示。对于一个三维向量场F(x, y, z) = (Fx, Fy, Fz),其散度可以定义为: div F = ∂Fx/∂x + ∂Fy/…

英文字体:创意前卫杀手级标题海报封面设计粗体字体 Morne Display

看啊&#xff0c;设计师们&#xff01;Morne 刚刚进入字体游戏&#xff0c;让我们告诉你&#xff0c;它不是来玩的——认识我们的字体&#xff0c;它就像你早上的咖啡一样大胆。无论您是在制作杀手级标题、偷偷摸摸的副标题还是大胆的海报&#xff0c;Morne 都能为您提供前后、…

LLM - 使用 LLaMA-Factory 部署大模型 HTTP 多模态服务 (4)

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/144881432 大模型的 HTTP 服务&#xff0c;通过网络接口&#xff0c;提供 AI 模型功能的服务&#xff0c;允许通过发送 HTTP 请求&#xff0c;交互…

【大模型系列】Mobile-Agent(2024.04)

Paper: https://arxiv.org/pdf/2401.16158Github: https://github.com/X-PLUG/MobileAgentAuthor: Junyang Wang et al. 北交、阿里巴巴 Mobile-agent核心工作&#xff1a; 首先使用视觉感知工具(检测和OCR模型)识别前端界面中文本和图像元素的精确位置 检测图标&#xff1a;…

JVM实战—8.如何分析jstat统计来定位GC

大纲 1.使用jstat了解线上系统的JVM运行状况 2.使用jmap和jhat了解线上系统的对象分布 3.如何分析JVM运行状况并合理优化 4.使用jstat分析模拟的BI系统JVM运行情况 5.使用jstat分析模拟的计算系统JVM运行情况 6.问题汇总 1.使用jstat了解线上系统的JVM运行状况 (1)JVM的…

什么是Redis哨兵机制?

大家好&#xff0c;我是锋哥。今天分享关于【什么是Redis哨兵机制&#xff1f;】面试题。希望对大家有帮助&#xff1b; 什么是Redis哨兵机制&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis 哨兵&#xff08;Sentinel&#xff09;机制是 Redis 提…

深度学习的魔法世界

技术文章&#xff1a;深度学习的魔法世界 引言 嘿&#xff0c;今天我们要一起探索一个非常酷的魔法世界——深度学习&#xff01;这是一门让计算机变得超级聪明的科学。我们会用最简单的语言来解释深度学习的基本概念&#xff0c;让你们也能轻松理解。 一、深度学习的六大魔…

数据挖掘——决策树分类

数据挖掘——决策树分类 决策树分类Hunt算法信息增益增益比率基尼指数连续数据总结 决策树分类 树状结构&#xff0c;可以很好的对数据进行分类&#xff1b; 决策树的根节点到叶节点的每一条路径构建一条规则&#xff1b;具有互斥且完备的特点&#xff0c;即每一个样本均被且…

RFID手持机与RFID工业平板在仓储物流管理系统中的选型

概述 随着物联网技术在仓储物流管理系统中的普及&#xff0c;RFID手持机与RFID工业平板作为基于RFID技术手持式读写器的两种重要终端设备形态&#xff0c;得到了广泛应用。尽管RFID手持机与RFID工业平板都具备读写 RFID标签的基本功能&#xff0c;使用场景较为类似&#xff0c…

文件本地和OSS上传

这里写目录标题 前端传出文件后端本地存储阿里云OSS存储上传Demo实现上传ConfigurationProperties 前端传出文件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>上传文件</title> </head&g…

element-plus大版本一样,但是小版本不一样导致页面出bug

npm 的版本 node的版本 npm的源这些都一样&#xff0c;但是效果不一样 发现是element的包版本不一样导致的 2.9.1与2.8.1的源是不一样的&#xff0c;导致页面出bug;

CSS进阶和SASS

目录 一、CSS进阶 1.1、CSS变量 1.2、CSS属性值的计算过程 1.3、做杯咖啡 1.4、下划线动画 1.5、CSS中的混合模式(Blending) 二、SASS 2.1、Sass的颜色函数 2.2、Sass的扩展(extend)和占位符(%)、混合(Mixin) 2.3、Sass的数学函数 2.4、Sass的模块化开发 2.5、Sass…

python-Flask:SQLite数据库路径不正确但是成功访问到了数据库,并对表进行了操作

出现了这个问题&#xff0c;就好像是我要去找在南方的人&#xff0c;然后我刚好不分南北&#xff0c;我认为的方向错了&#xff0c;实则方向对了。 在我针对复盘解决&#xff1a;sqlite3.OperationalError: unrecognized token: “{“-CSDN博客这个内容的时候&#xff0c;又出现…

剪映--关键帧教程:制作视频文字说明,文字动态划线,透明文字,虚拟触控,画面旋转缩小退出

关键帧介绍 剪映当中许多动态的效果都是关键帧的应用&#xff0c;像接下来会讲到的文字动态划线&#xff0c;画面旋转退出&#xff0c;都是关键帧的效果&#xff0c;用户只要设定初始状态和最后状态&#xff0c;软件会将中间的动态补齐。剪辑的难点在于自己需要先想好要怎么去…

【数据结构Ⅰ复习题】

如有错误欢迎指正&#xff0c;题目根据教材----------严蔚敏数据结构&#xff08;c语言版 第2版&#xff09;人民邮电电子版 数据结构Ⅰ复习题 一、填空题1&#xff0e;算法应该具备的5个重要特性有___有穷性___、确定性、可行性、输入和输出。2&#xff0e;非空单链表L中*p是头…

697: Edit Distance

我们定义 dp[i][j] 为将字符串 A[0..i-1] 转换为 B[0..j-1] 的最小操作数 状态转移 通过动态规划的思想&#xff0c;我们可以使用 状态转移方程 来计算 dp[i][j]。具体来说&#xff0c;dp[i][j] 的值可以由以下几种操作得到&#xff1a; 如果 A[i-1] B[j-1]&#xff1a; 如果…