牛客网链接: link.
解题思路:
-
首先进行一个排序,那么就可以得到一个有序的数组。
-
我把前n个数就可以分别作为每一个队伍的最小值,那么剩下的就是如何来找每组中的中间值。
-
需要使用long long类型,对于n来说最大可能是10^5 , 但是每一个数据又最大是10^9, 所以每一个中间值的大小可能是10^14,但是是求和算sum,可能有很多个这么大小的值,所以相加已经超过了int的范围,所以需要改为更大的long long类型来适配。
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int n;
long long sum = 0;
while(cin >> n)
{
vector<int> v;
v.resize(3*n,'\0');
for(int i = 0;i<3*n;++i)
{
cin>>v[i];
}
sort(v.begin(),v.end());
//前n个数值刚好就是最小的,现在找中间大的
for(int j = n;j<3*n;j += 2)
{
sum += v[j];
}
cout<<sum<<endl;
}
return 0;
}