PostOffice

思路:

与两点一线找最短距离的思路相似,我们可以类比此题。 我们先这样思考,在一维坐标上有一系列的点,找一个点让这些点到它的距离最短,从两个点开始分析,只要点在两点之间距离都最小;若三个点,则最短距离就是相距最远距离的两点的差值,此时这个点就应该选中间那个点;同理若有多个点,毫无疑问最短距离就是各点对中值点的差值之和。 所以,对于此题我们将其先按X轴升序排列找到X轴方向的最短距离,然后在以Y轴升序找Y轴方向的最短距离,它们之和就是最终的最短距离。

#include<iostream>
#include<algorithm>
#include<math.h>

using namespace std;


int main()
{
    int x[10000], y[10000];
    int n, i, sum = 0;
    cin >> n;
    for (i = 0; i < n; i++)
    {
        cin >> x[i] >> y[i];
    }
    sort(x, x + n);
    sort(y, y + n);
    int X = x[n / 2], Y = y[n / 2];
    for (i = 0; i < n; i++)
    {
        sum += abs(x[i] - X) + abs(y[i] - Y);
    }
    cout << sum << endl;
    return 0;
}

results matching ""

    No results matching ""