zoukankan      html  css  js  c++  java
  • bzoj 3170 Tjoi 2013 松鼠聚会 曼哈顿距离&&切比雪夫距离

      因为曼哈顿距离很好求,所以要把每个点的坐标转换一下。

      转自:http://blog.csdn.net/slongle_amazing/article/details/50911504

      题解

      

          两个点的切比雪夫距离为d=max(|x1−x2|,|y1−y2|)
        写一下曼哈顿距离的常用处理方法
      两个点(x1,y2),(x2,y2)

      其曼哈顿距离=|x1−x2|+|y1−y2|
      因为|x1−x2|=max(x1−x2,x2−x1)
      所以可以写成=max(x1−x2+y1−y2,x1−x2+y2−y1,x2−x1+y1−y2,x2−x1+y2−y1)

      =max((x1+y1)−(x2+y2),(x1−y1)−(x2−y2),−(x1−y1)+(x2−y2),−(x1+y1)+(x2+y2))

      =max(|(x1+y1)−(x2+y2)|,|(x1−y1)−(x2−y2)|)

      令x′=x+y,y′=x−y=max(|x′1−x′2|,|y′1−y′2|)

      这样曼哈顿距离就被转化为了切比雪夫距离
      同理,我们把切比雪夫距离转化为曼哈顿距离(x,y)=((x+y)/2,(x−y)/2)
      就转化为了n−1个点到一个点的曼哈顿距离最小
      计算曼哈顿距离x和y分开计算即可

      

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstdio>
     4 #include<cstring>
     5 #define ll long long
     6 #define N 100005
     7 using namespace std;
     8 int n;
     9 struct node
    10 {
    11     int x,y,id;
    12     friend bool operator < (node aa,node bb)
    13     {
    14         return aa.x<bb.x;
    15     }
    16 }a[100005];
    17 ll ans[N],sum[N];
    18 bool cmp(node aa,node bb)
    19 {
    20     return aa.y<bb.y;
    21 }
    22 int main()
    23 {
    24     scanf("%d",&n);int t1,t2;
    25     for(int i=1;i<=n;i++)
    26     {
    27         scanf("%d%d",&t1,&t2);
    28         a[i].x=t1+t2;a[i].y=t1-t2;a[i].id=i;
    29     }
    30     sort(a+1,a+n+1);
    31     for(int i=1;i<=n;i++)sum[i]=sum[i-1]+a[i].x;
    32     for(int i=1;i<=n;i++)
    33     {
    34         ans[a[i].id]+=(ll)a[i].x*(i-1)-sum[i-1];
    35         ans[a[i].id]+=(sum[n]-sum[i])-((ll)a[i].x*(n-i));
    36     }
    37     sort(a+1,a+n+1,cmp);
    38     for(int i=1;i<=n;i++)sum[i]=sum[i-1]+a[i].y;
    39     for(int i=1;i<=n;i++)
    40     {
    41         ans[a[i].id]+=(ll)a[i].y*(i-1)-sum[i-1];
    42         ans[a[i].id]+=(sum[n]-sum[i])-((ll)a[i].y*(n-i));
    43     }
    44     ll mx=1ll<<62;
    45     for(int i=1;i<=n;i++)mx=min(mx,ans[i]);
    46     printf("%lld
    ",mx/2);
    47     return 0;
    48 }
  • 相关阅读:
    css定位
    盒子模型
    操作边框的属性
    操作表格的属性
    常用css样式
    选择器
    编写css代码的方式
    javascript DOM 共同父节点
    最大子段和问题
    regexp 正则表达式
  • 原文地址:https://www.cnblogs.com/ezyzy/p/6510795.html
Copyright © 2011-2022 走看看