TJOI2013 松鼠聚會

2021-09-27 10:34:52 字數 1760 閱讀 3739

題目描述

草原上住著一群小松鼠,每個小松鼠都有乙個家。時間長了,大家覺得應該聚一聚。但是草原非常大,松鼠們都很頭疼應該在誰家聚會才最合理。

每個小松鼠的家可以用乙個點x,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。

輸入格式

第一行是乙個整數n,表示有多少只松鼠。接下來n行,第i行是兩個整數x和y,表示松鼠i的家的座標

輸出格式

乙個整數,表示松鼠為了聚會走的路程和最小是多少。

輸入輸出樣例

輸入 #1複製

6-4 -1

-1 -2

2 -4

0 20 3

5 -2

輸出 #1複製

20輸入 #2複製

60 0

2 0-5 -2

2 -2

-1 2

4 0輸出 #2複製

15說明/提示

樣例解釋

在第乙個樣例中,松鼠在第二隻松鼠家(-1,-2)聚會;在第二個樣例中,松鼠在第一只松鼠家(0.0)聚會。

資料範圍

30%的資料,0 ≤ n ≤ 1000

100%的資料,0 ≤ n ≤ 100000; −10^9 ≤ x, y ≤ 10^9

空間距離變換題目,實際沒什麼難度。

我們由切比雪夫距離和曼哈頓距離的變換可知:

將乙個點(x,y)的座標變為(x+y,x−y)後,原座標系中的曼哈頓距離 = 新座標系中的切比雪夫距離

將乙個點(x,y)的座標變為(x+y2,x−y2) 後,原座標系中的切比雪夫距離 = 新座標系中的曼哈頓距離

然後題目給出了切比雪夫距離,我們變為曼哈頓距離,然後曼哈頓距離,x和y的計算是可以分開的,然後我們計算字首和,就可以分別算出貢獻值了。

ac**:

#include

#define int long long

using namespace std;

const

int n=

1e5+10;

int n,res=

1e18

,x[n]

,y[n]

,sx[n]

,sy[n]

;struct nodet[n]

;signed

main()

sort

(x+1

,x+1

+n);

sort

(y+1

,y+1

+n);

for(

int i=

1;i<=n;i++

) sx[i]

=x[i]

+sx[i-1]

;for

(int i=

1;i<=n;i++

) sy[i]

=y[i]

+sy[i-1]

;for

(int i=

1;i<=n;i++

) cout<<

(res>>

1ll)

}

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 1 x 1...

雜題 Tjoi 2013 松鼠聚會

問題 f tjoi 2013 松鼠聚會 時間限制 1 sec 記憶體限制 128 mb 提交 70 解決 35 提交 狀態 討論版 題目描述 有n個小松鼠,它們的家用乙個點x,y表示,兩個點的距離定義為 點 x,y 和它周圍的8個點即上下左右四個點和對角的四個點,距離為1。現在n個松鼠要走到乙個松鼠...

3170 Tjoi 2013 松鼠聚會

題目鏈結 題目大意 給定平面上的n個點,求這n個點中的乙個點,使其到這n個點的切比雪夫距離之和最小 題解 根據結論 把座標系旋轉45 曼哈頓距離轉化成切比雪夫距離,把點 x y 變成 x y,x y 這樣新點之間的切比雪夫距離就是原點之間的曼哈頓距離 同理可以把切比雪夫距離轉化成曼哈頓距離,把點 x...