最小的和最大次大组队,次小的和第三大第四大组队。。。
这样保证队伍水平值取到最大。
1 2 3 4 5 6 7 8 9 1 8 9 2 6 7 3 4 5
水平值分别为 8 6 4,也就是我们倒着取数就好了。
用 vector 替代动态数组更好一点。 注意,必须用 long long 作为sum的类型,不然有些数据太大了,通不过样例。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
// 最大的数可以带上次大的,第三大带上第四大的
int n = 0;
while(cin >> n){
vector<int> arr;
arr.resize(3*n);
for(int i = 0; i < 3*n; ++i)
cin >> arr[i];
sort(arr.begin(), arr.end()); // 排升序
long long sum = 0; // 1 2 3 5 5 5 7 8 9
for(int i = 3*n-2; i >= n; i-=2)
sum += arr[i];
cout << sum << endl;
}
return 0;
}