一开始没读懂,其实就是哈夫曼树求最长,从最短开始合并就ok。
#include<bits/stdc++.h>
using namespace std;
vector<int> v;
int main() {
int n, ans;
scanf ("%d", &n);
v.resize(n);
for (int i = 0; i < n; i++) {
scanf ("%d", &v[i]);
}
sort(v.begin(), v.end());
for (int i = 0; i < v.size(); i++) {
if (i == 0) {
ans = v[i];
continue;
}
ans = (ans + v[i]) / 2;
}
cout << ans;
}