對乙個點(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
1view codevar2 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.
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個松鼠要走到乙...