【newcode】牛牛组队竞赛

简介: 【newcode】牛牛组队竞赛

🍃题目链接

组队竞赛


🍃题目

牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。

例如:

一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3

一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3

一个队伍三个队员的水平值分别是1,5,2.那么队伍的水平值是2

为了让比赛更有看点,牛牛想安排队伍使所有队伍的水平值总和最大。

如样例所示:

如果牛牛把6个队员划分到两个队伍

如果方案为:

team1:{1,2,5}, team2:{5,5,8}, 这时候水平值总和为7.

而如果方案为:

team1:{2,5,8}, team2:{1,5,5}, 这时候水平值总和为10.

没有比总和为10更大的方案,所以输出10.


🍃题目详解

先将队员们的水平值依次排序,然后每次选出最大的两个队员和最小的一个队员组队,这样分组就能让所有队伍的水平值总和最大

将队员们的水平值放入数组中,遍历数组,每组平均水平值就在排好序的数组 array.length - (2 * i) 的下标处,在全部相加就可得到所有队伍最大水平值总和

65.png


🍃代码

import java.util.*;
public class Main {
    public static void main (String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        // 当输入的 n 值为0,直接 return ,然后输出 0
        if (n == 0) {
            System.out.println(0);
            return;
        }
        // 定义数组存放各队员水平值,输入的 n 值为队伍数,所以数组大小定义为3 * n
        long[] array = new long[3 * n];
        for (int i = 0; i < 3 * n; i++) {
            array[i] = sc.nextInt();
        }
        // 排序
        Arrays.sort(array);
        long ans = 0;   // 定义结果变量
        for (int i = 1; i <= n; i++) {
            index = array.length - (2 * i);
            ans += array[length];
        }
        System.out.println(ans);
    }
}
目录
相关文章
|
10月前
|
存储
【蓝桥杯冲刺】蓝桥杯12届省赛C++b组真题-填空题
【蓝桥杯冲刺】蓝桥杯12届省赛C++b组真题-填空题
72 1
|
10月前
【蓝桥杯冲刺】蓝桥杯11届省赛C++b组真题-填空题
【蓝桥杯冲刺】蓝桥杯11届省赛C++b组真题-填空题
99 0
|
10月前
|
测试技术
【蓝桥杯冲刺】蓝桥杯13届省赛C++b组真题-A~E题
【蓝桥杯冲刺】蓝桥杯13届省赛C++b组真题-A~E题
116 0
|
10月前
|
大数据
【数模比赛】2023美国大学生数学建模比赛(思路、代码......)
【数模比赛】2023美国大学生数学建模比赛(思路、代码......)
252 0
【数模比赛】2023美国大学生数学建模比赛(思路、代码......)
L1-079 天梯赛的善良 (20 分)
L1-079 天梯赛的善良 (20 分)
195 0
|
机器学习/深度学习 人工智能 自然语言处理
1036组队比赛
1036组队比赛
91 0
7-7 天梯赛的善良 (20 分)
7-7 天梯赛的善良 (20 分)
242 0