3170 Tjoi 2013 松鼠聚會

2022-09-06 23:03:27 字數 2428 閱讀 9074

對乙個點(x,y)定義x'=x+y,y'=x-y,曼哈頓距離就可以寫成max(|x1'-x2'|,|y1'-y2'|)。

回到原題,容易發現,兩個點(x1,y1)和(x2,y2)的距離為max(|x1-x2|,|y1-y2|)。

把上面的處理倒過來,就可以回到我們熟悉的曼哈頓距離了。

把點轉換後列舉每個點,然後o(1)求出它到所有點的曼哈頓距離和。(排序後字首和優化)。

runid

user

problem

result

memory

time

language

code_length

submit_time

410862

lbz007

3170

accepted

5696 kb

696 ms

pascal/edit

1487 b

2013-05-13 07:13:26

1

var2 p,q,sum,a,x,y:array[0..100000]of

double;

3 b,rank:array[1..100000]of

longint;

4ans,an,xx,yy:extended;

5n,i,aa,bb:longint;

6procedure

sort(ll,rr:longint);

7var

8t,i,j:longint;

9xx,tt:double;

10begin

11 i:=ll;j:=rr;

12 xx:=a[ll+random(rr-ll+1

)];13

while i<=j do

14begin

15while a[i]do

inc(i);

16while a[j]>xx do

dec(j);

17if i<=j then

18begin

19 tt:=a[i];a[i]:=a[j];a[j]:=tt;

20 t:=b[i];b[i]:=b[j];b[j]:=t;

21inc(i);dec(j);

22end;23

end;

24if llthen

sort(ll,j);

25if rr>i then

sort(i,rr);

26end;27

function

abs(xx:extended):extended;

28begin

29if xx>0

then

exit(xx)

30else exit(-xx);

31end;32

begin

33readln(n);

34for i:=1

to n do

35begin

36readln(aa,bb);

37 x[i]:=(aa+bb)/2

;38 y[i]:=(aa-bb)/2;39

end;

40 a:=x;

41for i:=1

to n do b[i]:=i;

42 sort(1

,n);

43for i:=1

to n do

44 sum[i]:=sum[i-1]+a[i];

45for i:=1

to n do

46begin

47 p[b[i]]:=a[i]*(i-1)-sum[i-1

];48 p[b[i]]:=p[b[i]]+sum[n]-sum[i]-a[i]*(n-i);

49end

;50 ans:=9000000000000000

;51 a:=y;

52for i:=1

to n do b[i]:=i;

53 sort(1

,n);

54 sum[0]:=0;55

for i:=1

to n do

56 sum[i]:=sum[i-1]+a[i];

57for i:=1

to n do

58begin

59 q[b[i]]:=a[i]*(i-1)-sum[i-1

];60 q[b[i]]:=q[b[i]]+sum[n]-sum[i]-a[i]*(n-i);

61if q[b[i]]+p[b[i]]then ans:=p[b[i]]+q[b[i]];

62end

;63 writeln(ans:0:0

);64

end.

view code

3170 Tjoi 2013 松鼠聚會

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

3170 Tjoi 2013 松鼠聚會

給定n個點,找到乙個點使這個點到其他所有點的切比雪夫距離之和最小。我們知道切比雪夫距離和曼哈頓距離的轉化公式 1 表示切比雪夫距離,2 表示曼哈頓距離 我們有 x 1 x 2 y 2,y 1 x 2 y 2 x 2 frac,y 2 frac 所以現在轉化成曼哈頓距離了 所以我們直接列舉點即可 什麼...

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個松鼠要走到乙...