牛客网链接: 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;
}

这篇博客探讨了如何通过排序一个整数数组来找到每组的中间值,并强调了在处理大数据时使用longlong类型的重要性。代码示例展示了如何读取输入,对数组排序,然后计算并输出所有奇数位置元素(即中间值)的总和。这个过程涉及到数值溢出的预防和有效计算中间值的策略。
747

被折叠的 条评论
为什么被折叠?



