有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
6sample output-4 -1
-1 -2
2 -4
0 20 3
5 -2
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...