zoukankan      html  css  js  c++  java
  • 【bzoj3210】花神的浇花集会

    将(x,y)转化成(x+y,x-y)可以将切比雪夫距离转化成曼哈顿距离(自己推一推)
    A、B的切比雪夫距离就是A‘、B‘曼哈顿距离的一半。
    那么可以将x、y分离处理,排序中位数即可。
    注意如果最后选的最优的X、Y代回去不是整数,要在其上下左右中选个最优方案。
     
    #include<algorithm>
    #include<iostream>
    #include<cstdlib>
    #include<cstring>
    #include<cstdio>
    #include<cmath>
    using namespace std;
     
    typedef long long LL;
     
    #define N 100010
     
    int n;
    int x,y;
     
    int X[N],Y[N];
     
    LL check(int x,int y)
    {
        LL res(0);
        for (int i=1;i<=n;i++)
            res+=abs(x-X[i])+abs(y-Y[i]);
        return res;
    }
     
    int main()
    {
        scanf("%d",&n);
        for (int i=1;i<=n;i++)
        {
            scanf("%d%d",&x,&y);
            X[i]=x+y;
            Y[i]=x-y;
        }
        sort(X+1,X+n+1);
        sort(Y+1,Y+n+1);
        x=X[n+1>>1];
        y=Y[n+1>>1];
        if (~(x ^ y) & 1)
            printf("%lld
    ",check(x,y)>>1);
        else
            printf("%lld
    ",min(min(check(x+1,y),check(x-1,y)),min(check(x,y+1),check(x,y-1)))>>1);
        return 0;
    }
    

      

  • 相关阅读:
    HDU What Are You Talking About
    谷歌面试题
    POJ 2299 UltraQuickSort
    单链表排序
    HDU Hat’s Words
    C++ const关键字
    求二叉树任意两点间的距离
    HDU Phone List
    POJ 2352 Stars
    C++ volatile关键字
  • 原文地址:https://www.cnblogs.com/yangjiyuan/p/5762536.html
Copyright © 2011-2022 走看看