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

2022-04-30 14:39:08 字數 1128 閱讀 1157

我們在用二維樹狀陣列的時候,可以得到乙個邊與座標軸平行的矩形內點集的資訊。

如果我們需要得到得到到乙個點的距離小於等於k的點的資訊呢。這些點構成的不在是邊也座標軸平行的矩形,而是乙個對角線與座標軸平行的菱形。

可以通過轉化,使得整個座標軸旋轉45°,然後我們菱形變成了方方正正的矩形,又可以用而二維樹狀陣列或者直接用字首和來得到矩形區間資訊。

旋轉後區域邊長*√2,面積*2,原本的距離<=k的區域,現在變成了[x』-k,y』-k]到[x』+k,y』+k]的矩形區域。我們假設順時針旋轉45°。

怎麼轉化呢?為了避免用公式的時候出錯,我們一豎一豎的旋**

對於每一豎,我們得到(x,0)對應的(x,n-x+1),然後向上乙個個移動,等效於向右上乙個乙個移動。

則有:

for(int i=1;i<=n;i++)
注意, 為了避免k太大,而超出邊界,而邊界外的點沒有可用資訊,我們需要判斷一下邊界。

void stardard(int &x)

所以想要得到資訊的時候,也同樣轉化座標:

int x1=x,y1=n-x+1

; x1+=y-1;y1+=y-1

;int

ans+=getsum(i,x1-k,y1-k,x1+k,y1+k);

(裡面記住縮小邊界)

那麼根本不用記公式(雖然公式不難)。切比雪夫轉曼哈頓的話,也只需要乙個乙個轉就行了。不好處理邊界的話,可以每個點的橫縱座標都加乙個值,防止越界。

感覺還是比較常用的,所以例題就不說了。

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

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

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

曼哈頓距離和切比雪夫距離 兩個點的距離定義為點 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 ...

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

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