zoukankan      html  css  js  c++  java
  • HDU 4312 Meeting point-2(切比雪夫距离转曼哈顿距离)

    http://acm.hdu.edu.cn/showproblem.php?pid=4312

    题意:在上一题的基础上,由四个方向改为了八个方向。

    思路:

    引用自http://blog.csdn.net/bigbigship/article/details/43163719

    切比雪夫距离:设a(x1,y1),b(x2,y2);DIS = max(|x1-x2|,|y1-y2|) = (|x1-x2+y1-y2|+|x1-x2-y1+y2|)/2;

    我们将点aa的坐标看成(x1+y1,x1-y1),bb的坐标看成(x2+y2,x2-y2),从几何意义上讲相当于点在原

    坐标系上逆时针旋转45度,并将坐标扩大√2倍。

    然后求新的的最小的曼哈顿距离和的一半即可。

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<algorithm>
     4 using namespace std;
     5 typedef long long ll;
     6 
     7 int n;
     8 
     9 struct node
    10 {
    11     ll x,y;
    12     int id;
    13 }p[100005];
    14 
    15 ll sumx[100005],sumy[100005];
    16 ll numx[100005],numy[100005];
    17 
    18 bool cmp1(node a, node b)
    19 {
    20     return a.x < b.x;
    21 }
    22 
    23 bool cmp2(node a, node b)
    24 {
    25     return a.y < b.y;
    26 }
    27 
    28 int main()
    29 {
    30     //freopen("in.txt","r",stdin);
    31     int T;
    32     scanf("%d",&T);
    33     while(T--)
    34     {
    35         scanf("%d",&n);
    36         for(int i=1;i<=n;i++)
    37         {
    38             scanf("%lld%lld",&p[i].x,&p[i].y);
    39             p[i].id = i;
    40             int tmp = p[i].x;
    41             p[i].x = tmp - p[i].y;
    42             p[i].y = p[i].y + tmp;
    43         }
    44 
    45         sumx[0] = sumy[0] = 0;
    46         sort(p+1,p+n+1,cmp1);
    47         for(int i=1;i<=n;i++)  sumx[i] = sumx[i-1] + p[i].x;
    48         for(int i=1;i<=n;i++)  numx[p[i].id] = ((i-1)*p[i].x-sumx[i-1] + (sumx[n]-sumx[i]) - (n-i)*p[i].x);
    49         sort(p+1,p+n+1,cmp2);
    50         for(int i=1;i<=n;i++)  sumy[i] = sumy[i-1] + p[i].y;
    51         for(int i=1;i<=n;i++)  numy[p[i].id] = ((i-1)*p[i].y-sumy[i-1] + (sumy[n]-sumy[i]) - (n-i)*p[i].y);
    52 
    53         ll ans = numx[1] + numy[1];
    54         for(int i=2;i<=n;i++)
    55             ans=min(ans,numx[i]+numy[i]);
    56         printf("%lld
    ",ans/2);
    57     }
    58     return 0;
    59 }
  • 相关阅读:
    下载视频
    009 逻辑 + MFC CString
    008 浅拷贝与深拷贝
    007 operator
    006 this指针原理
    005 逻辑 + STL list
    004 list::sort
    003 逻辑 + mfc CList
    001 C++历史和思想
    并查集模板
  • 原文地址:https://www.cnblogs.com/zyb993963526/p/7859854.html
Copyright © 2011-2022 走看看