组队竞赛 c++编程

阅读: 评论:0

组队竞赛 c++编程

组队竞赛 c++编程

题目描述:
链接:=1&page=1&onlyReference=false
来源:牛客网

牛牛举办了一次编程比赛,参加比赛的有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.

**题目分析: **
从题中已知,每组的水平值为该组的第二高水平值,要想使得所有队伍的水平值之和最大,则每组的的第二高尽量为最大,所以在所有水平值中取出最高的两位和最小的一位够成一组,其他组队在剩下的数中找最大的两位和最小的一位构成,依次类推,这种情况下构成的组的水平值总和最大。
代码实现:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;long TeamMax(int n,vector<int>& v){sort(v.begin(), v.end());long sum=0;for (int i=n;i<3*n;i+=2){sum+=v[i];}return sum;}int main()
{int n;int t;vector<int> v;cin>>n;for (int i=0;i<n*3;i++){cin>>t;v.push_back(t);}cout<<TeamMax(n, v)<<endl;return 0;
}

本文发布于:2024-02-01 16:25:34,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170677593637930.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23