給出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...