Acwing 104 货仓地址
题目链接:
思路:
由图可得,假如有两点,要在数轴上面选择一点,让这点到这两个点的距离之和最小
那么有三种情况:如下图演示可得,将这个点选择在两点的中间,则这个距离最短。
那么如果有奇数点呢,那么就将这个点选在最中间的那个点上面。
所以可以推出,这个点要选择在所有点的中间。
代码:
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1000010;
int nums[N];
int main()
{
int n;
int res = 0;
cin>>n;
for(int i = 0; i < n; i++ )cin>>nums[i];
sort(nums,nums+n);
for(int i = 0; i < n; i++)
{
//nums[n/2] 为最中间那个点,每一个点剪去最中间的点的和便是结果
int tmp = nums[i] - nums[n/2];
tmp = tmp > 0 ? tmp : tmp * (-1);
res += tmp;
}
cout << res << endl;
return 0;
}