• 【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;
    }
    

      

  • 相关阅读:
    SPOJ SAMER08A
    SPOJ TRAFFICN
    CS Academy Set Subtraction
    CS Academy Bad Triplet
    CF Round 432 C. Five Dimensional Points
    CF Round 432 B. Arpa and an exam about geometry
    SPOJ INVCNT
    CS Academy Palindromic Tree
    身体训练
    简单瞎搞题
  • 原文地址:https://www.cnblogs.com/yangjiyuan/p/5762536.html
Copyright © 2020-2023  润新知