洛谷3964 松鼠聚會

2021-10-04 22:18:13 字數 1224 閱讀 9562

p3964

首先學習一下曼哈頓距離和切比雪夫距離即二者之間的轉換。

那根據切比雪夫距離的定義,只要x, y這個點到它周圍八個點的距離都是一的話,就是使用的切比雪夫距離。

對於給出的n個點,選擇其中乙個點並計算它到其他點的距離的話,由於切比雪夫距離定義為:d = max(|x1 - x2|,|y1 - y2|)。計算所有點到當前點距離的時間複雜度為o(n)。那n個點就是o(n2)。時間上來說並不理想。

我們可以把給出的座標轉換為曼哈頓距離,曼哈頓距離的定義是d = |x1 - x2| + |y1 - y2|。對於xi來說所有點到他的距離為 d = |x1 - xi| + |x2 - xi| + … + |xn - xi|

通過對所有點的x進行排序,就可以將公式裡的絕對值去掉。

式子變為了 d = xi - x1 + xi - x2 +… + xi - xi + xi+1 - xi + … + xn - xi 也就是位置i之前的全變為xi減去當前點x值,i後面的全都不變。

再進行整理得到

進行一次遍歷找到最小的距離即可,在轉換的時候,可以先不除二,為了避免浮點數運算。在求出距離後再對距離除二即可。

#include

#include

using

namespace std;

typedef

long

long ll;

struct node

;struct node a[

100010];

ll x[

100010

], y[

100010];

ll sumx[

100010

],sumy[

100010];

intmain()

sort (x+

1, x+n+1)

; sort (y+

1, y+n+1)

;for

(int i=

1; i<=n; i++)

ll minnum =

8e18

;for

(int i=

1; i<=n; i++)

cout << minnum /

2<< endl;

return0;

}

P3964 松鼠聚會(切比雪夫距離模板)

將乙個點 x,y 的座標變為 x y,x y 後,原座標系中的曼哈頓距離 新座標系中的切比雪夫距離 將乙個點 x,y 的座標變為 x y 2,x y 2 後,原座標系中的切比雪夫距離 新座標系中的曼哈頓距離 切比雪夫距離 max dx,dy include using namespace std t...

松鼠的聚會

有若干只松鼠住在可視為笛卡爾座標系的草原上,它們想選定其中乙隻的家作為目的地去參加聚會,並且不希望走太長距離,請你求出最小距離.值得注意的是,乙個點到其周圍八個點距離均為 1 此題我們不難發現,任意兩點間的距離為兩點間橫縱座標差的絕對值的較大值,我們一般將這種距離叫做切比雪夫距離.其實,笛卡爾座標系...

TJOI2013 松鼠聚會

題目描述 草原上住著一群小松鼠,每個小松鼠都有乙個家。時間長了,大家覺得應該聚一聚。但是草原非常大,松鼠們都很頭疼應該在誰家聚會才最合理。每個小松鼠的家可以用乙個點x,y表示,兩個點的距離定義為點 x,y 和它周圍的8個點 x 1,y x 1,y x,y 1 x,y 1 x 1,y 1 x 1,y ...