題意:求切比雪夫距離
直接求不好求,可以轉化成曼哈頓距離
切比雪夫:
$$ 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 #includeaa#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
<
}
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 ...