首页 > 其他 > 详细

BZOJ 3210 花神的浇花集会 切比雪夫距离

时间:2014-12-23 14:00:03      阅读:209      评论:0      收藏:0      [点我收藏+]

题目大意:平面上一些点,求一个点到所有点的切比雪夫距离只和最小。


思路:和那个松鼠的题目比较像,但是松鼠的那个是求的点是所有点中的一个点,而这个题却不一定。和那个题一样,将横纵坐标分别排序,然后取中位数统计。但是有可能会出现小数,因此随即调整一下,取最小值就行了。


CODE:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define MAX 100010
using namespace std;
#define min(a,b) ((a) < (b) ? (a):(b))
 
int X[MAX],Y[MAX];
 
struct Point{
    int x,y;
     
    void Read(int p) {
        scanf("%d%d",&x,&y);
        X[p] = x + y;
        Y[p] = x - y;
    }
}point[MAX];
 
int points;
 
inline long long GetAns(int x,int y)
{
    long long re = 0;
    for(int i = 1; i <= points; ++i)
        re += abs(x - X[i]) + abs(y - Y[i]);
    return re;
}
 
int main()
{
    cin >> points;
    for(int i = 1; i <= points; ++i)
        point[i].Read(i);
    sort(X + 1,X + points + 1);
    sort(Y + 1,Y + points + 1);
    int x = X[(points + 1) >> 1],y = Y[(points + 1) >> 1];
    if((x&1 && y&1) || (!(x&1) && !(y&1)))
        cout << GetAns(x,y) / 2 << endl;
    else
        cout << min(min(GetAns(x + 1,y),GetAns(x,y + 1)),min(GetAns(x - 1,y),GetAns(x,y - 1))) / 2 << endl;
    return 0;
}


BZOJ 3210 花神的浇花集会 切比雪夫距离

原文:http://blog.csdn.net/jiangyuze831/article/details/42101233

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!