BZOJ3170 Tjoi2013 松鼠聚會

2022-05-19 19:27:54 字數 1109 閱讀 3172

給出n個點的座標,規定兩個點的距離=max(|x1-x2|,|y1-y2|)

要求選出乙個點,使得這個點到所有點的距離和最小

切比雪夫轉換例題

將乙個點(x,

y)'>(x,y)

的座標變為(x+

y2,x

−y2)

'>

(x+y,x−y)後(x

,y)'>(x+

y2,x

−y2)

'>原座標系中的切比雪夫距離=

'>=

新座標系中的曼哈頓距離

求最小曼哈頓距離

就行了關於切比雪夫與曼哈頓距離轉化請左轉

#include#include

#include

#include

#include

#define maxn 110000

#define mes(x,y) memset(x,y,sizeof(x))

using

namespace

std;

typedef

long

long

ll;struct nodex[maxn],y[maxn];

bool cmp(node n1,node n2)

ll lx[maxn],ly[maxn],rx[maxn],ry[maxn];

inttx[maxn],ty[maxn];

intmain()

sort(x+1,x+n+1,cmp);sort(y+1,y+n+1

,cmp);

for(int i=1;i<=n;i++) tx[x[i].id]=i,ty[y[i].id]=i;

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

for(int i=n-1;i>=1;i--)

ll ans=1ll<<62

;

for(int i=1;i<=n;i++) ans=min(ans,lx[tx[i]]+ly[ty[i]]+rx[tx[i]]+ry[ty[i]]);

printf(

"%lld\n

",ans/2

);

return0;

}

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 Tjoi 2013 松鼠聚會

有n個小松鼠,它們的家用乙個點x,y表示,兩個點的距離定義為 點 x,y 和它周圍的8個點即上下左右四個點和對角的四個點,距離為1。現在n個松鼠要走到乙個松鼠家去,求走過的最短距離。input 第一行給出數字n,表示有多少只小松鼠。0 n 10 5 下面n行,每行給出x,y表示其家的座標。10 9 ...

3170 Tjoi 2013 松鼠聚會

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