松鼠搬家 切比雪夫距離 到 曼哈頓距離

2022-05-20 22:12:33 字數 1292 閱讀 2117

題意:求切比雪夫距離

直接求不好求,可以轉化成曼哈頓距離

切比雪夫:

$$ d=max( | x_1-x_2 | , | y_1-y_2 | ) $$

曼哈頓距離:

$$ d=| x_1-x_2 | + | y_1-y_2 |$$

$$ d=max( x_1-x_2+y_1-y_2,x_1-x_2+y_2-y_1,x_2-x_1+y_1-y_2,x_2-x_1+y_2-y_1 ) $$

讓 $ x_3=x_1+y_1, y_3=x_1-y_1, x_4=x_2+y_2, y_4=x_2-y_2 $

這樣 $ x_1=\frac, y_1=\frac $  ......

此時切比雪夫距離可以表示成

$$ d=\frac $$

轉化成了類似於曼哈頓距離的東西

只要排個序就行了

#include #include 

#include

#include

#include

#include

#define ll long long

#define mem(a,b) memset(a,b,sizeof(a))

using

namespace

std;

inline

intread()

while(q>='

0'&&q<='9')

return ans*flag;

}const

int n=100006

;ll an[n];

intid[n],x[n],y[n];

bool cmp_x(int a,int

b)bool cmp_y(int a,int

b)int

n;ll get_ans()

tt=0

;

for(int i=n;i>=1;--i)

sort(id+1,id+1+n,cmp_y);

tt=0

;

for(int i=1;i<=n;++i)

tt=0

;

for(int i=n;i>=1;--i)

tt=((ll)1

<<61

);

for(int i=1;i<=n;++i)

if(tt>an[i])

tt=an[i];

return tt/2.0;}

intmain()

cout

<

}

aa

1012 曼哈頓距離 切比雪夫距離

什麼是切比雪夫距離?什麼是曼哈頓距離?傻傻分不清,沒關係,看 曼哈頓距離設平面空間內存在兩點,它們的座標為 x1,y1 x2,y2 則dis x1 x2 y1 y2 即兩點橫縱座標差之和 切比雪夫距離 設平面空間內存在兩點,它們的座標為 x1,y1 x2,y2 則dis max x1 x2 y1 y...

總結 曼哈頓距離轉切比雪夫距離

我們在用二維樹狀陣列的時候,可以得到乙個邊與座標軸平行的矩形內點集的資訊。如果我們需要得到得到到乙個點的距離小於等於k的點的資訊呢。這些點構成的不在是邊也座標軸平行的矩形,而是乙個對角線與座標軸平行的菱形。可以通過轉化,使得整個座標軸旋轉45 然後我們菱形變成了方方正正的矩形,又可以用而二維樹狀陣列...

曼哈頓距離和切比雪夫距離轉化

曼哈頓距離和切比雪夫距離 兩個點的距離定義為點 x,y 和它周圍的 8 個點 x 1,y x 1,y x,y 1 x,y 1 x 1,y 1 x 1,y 1 x 1,y 1 x 1,y 1 距離為 1 用下 gyx 學長的圖 切比雪夫距離 dis max delta x,delta y delta ...