题意:
有
个人在X轴上,每个人的 位置是
,现在让在
轴上选择一点
作为会议点,每个人到这儿的代价为
,现在让你输出这
个人最小的代价和。
思路:
由于范围极小,直接枚举即可,可如果范围1e9那如何去解?
我们发现这是个单峰函数,最小值点在 处
由于本题中 只能为整数,所以如果极小值点为小数,我们取它两边的点比较即可。
int n;
int a[105];
int main(){
int sum = 0;
cin >> n;
for(int i = 1;i <= n;++i) cin >> a[i],sum += a[i];
int d1 = sum/n;
int d2 = d1 + 1;
int s1 = 0,s2 = 0;
for(int i = 1;i <= n;++i){
s1 += (d1 - a[i])*(d1 - a[i]);
s2 += (d2 - a[i]) * (d2 - a[i]);
}
cout << min(s1,s2);
}