bzoj3170 Tjoi 2013 松鼠聚會

2022-05-18 09:10:51 字數 1273 閱讀 8584

有n個小松鼠,它們的家用乙個點x,y表示,兩個點的距離定義為:點(x,y)和它周圍的8個點即上下左右四個點和對角的四個點,距離為1。現在n個松鼠要走到乙個松鼠家去,求走過的最短距離。

input

第一行給出數字n,表示有多少只小松鼠。0<=n<=10^5

下面n行,每行給出x,y表示其家的座標。

-10^9<=x,y<=10^9

output

表示為了聚會走的路程和最小為多少。

sample input

6

-4 -1

-1 -2

2 -4

0 20 3

5 -2

sample output

20

題解:

對於這題,我們可以得到d(i,j)=max(|xi-xj|,|yi-yj|),

設x』=(x+y)/2,y』=(x-y)/2

那麼d(i,j)=|xi』-xj』|+|yi』-yj』|

x,y軸可以分開統計

先是統計x軸,將所有松鼠的x』排序

用字首和和字尾和求出某個松鼠到其他松鼠的x軸距離

xi*(i-1)-sum(1..i-1)+sum(i+1..n)-(n-i)*xi

y軸同理

1 #include2 #include3 #include4

#define n 100007

5#define ll long long

6using

namespace

std;78

intn;

9double ans=1e20;

10ll sx,sy,ax[n],bx[n],ay[n],by[n];

11struct

point

12a[n];

1617

bool cmpx(point a,point b)

18bool cmpy(point a,point b)

19int

main()

2028 sort(a+1,a+n+1

,cmpy);

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

3035 sort(a+1,a+n+1

,cmpx);

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

3741

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

4251 printf("

%.0lf

",ans/2

);52 }

BZOJ3170 Tjoi 2013 松鼠聚會

time limit 10 sec memory limit 128 mb submit 531 solved 249 submit status 有n個小松鼠,它們的家用乙個點x,y表示,兩個點的距離定義為 點 x,y 和它周圍的8個點即上下左右四個點和對角的四個點,距離為1。現在n個松鼠要走到乙...

BZOJ3170 Tjoi2013 松鼠聚會

給出n個點的座標,規定兩個點的距離 max x1 x2 y1 y2 要求選出乙個點,使得這個點到所有點的距離和最小 切比雪夫轉換例題 將乙個點 x,y x,y 的座標變為 x y2,x y2 x y,x y 後 x y x y2,x y2 原座標系中的切比雪夫距離 新座標系中的曼哈頓距離 求最小曼哈...

3170 Tjoi 2013 松鼠聚會

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