- 贪心
- 注意:The result must be rounded to the nearest integer that is no greater than the maximum length. 即向下取整
- 见注释
#include<bits/stdc++.h>
using namespace std;
int main(void){
int N;
scanf("%d", &N);
vector<float> v(N);
for(int i = 0; i < N; i++)
scanf("%f", &v[i]);
sort(v.begin(), v.end());
float len = v[0];
for(int i = 1; i < N-1; i++){
if(len < v[i+1])
len = (len + v[i]) / 2;
else
v[i+1] = (v[i] + v[i+1]) / 2;
}
len = (len + v[N-1]) / 2;
//此题中对折后绳子长度为原来的一半
//当 c ≥ b ≥ a 时,必然有c ≥ (a+b)/2
//即对折后的那部分绳子仍为最短
//故代码可简写为
//for(int i = 1; i < N; i++)
// len = (len + v[i]) / 2;
printf("%d", (int)len);
return 0;
}