曼哈頓距離與切比雪夫距離 知識點總結 例題整理

2021-09-29 22:51:52 字數 2299 閱讀 1846

其實就是旋轉座標系,先旋轉再伸縮

一般曼哈頓距離直接做不好做的,可以轉成切比雪夫距離試試看

將乙個點(x,y)的座標變為

將乙個點(x,y)的座標變為

第二個顯然是第乙個的逆變換,所以記第乙個就好

①洛谷p3964 [tjoi2013]松鼠聚會

松鼠聚會

n<=1e5個點,點i座標(xi,yi)(-1e9<=xi,yi<=1e9),

求n個點中的一點使得其餘點到這一點切比雪夫距離和最小,輸出距離和

先轉曼哈頓距離,計i,j曼哈頓距離為

將x按增序排列,最後肯定是求

等價於具體實現時,先按((x+y)/2,(x-y)/2)轉曼哈頓座標,確保整數座標*2,最後將距離/2即可

#includeusing namespace std;

typedef long long ll;

const int n=1e5+10;

ll sx[n],sy[n],ans,tmp;

int n,x[n],y[n],idx,idy;

struct node

e[n];

int main()

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

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

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

ans=8e18;

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

printf("%lld\n",ans/2);

return 0;

}

②牛客挑戰賽34

拉普蘭德的願望

n(n<=1e5)個點,點的範圍(x,y)的絕對值在l(l<=5e4)內,

求有多少點對的曼哈頓距離不小於d(d<=1e7)

用總的點對減去小於d的點對,把曼哈頓距離轉化為切比雪夫距離

等價於判切比雪夫距離為d的正方形以內(不含矩形輪廓線)的點對有多少個

考慮到用每個正方形的左半部分去取點,這樣每個點對只會記錄一次,(左,右)

二維偏序問題,x排增序,按y值插入到bit上,詢問[y-d+1,y+d-1]的和,

x的距離每超過d時,就從bit裡把之前插的點刪去

#includeusing namespace std;

typedef long long ll;

const int n=1e5+10;

int n,d,l,a,b,tr[n*2];

ll ans;

struct node

e[n];

bool operator

int main()

sort(e+1,e+n+1);

ans=1ll*n*(n-1)/2;

for(int i=1,now=1;i<=n;++i)

ans=(ans-(sum(min(4*l,e[i].y+d-1))-sum(max(0,e[i].y-d))));//[y-d+1,y+d-1]

add(e[i].y,1);

} printf("%lld\n",ans);

return 0;

}

③四川大學第二屆scuacm新生賽(同步賽)

撿金幣

t(t<=100)組樣例,每次給出n*m(n,m<=1e3)的棋盤,每個格仔放入的金幣數v(1<=v<=1e6),

q(q<=1e5)組詢問,每次給出(x,y)和距離k,詢問到(x,y)曼哈頓距離小於等於k的金幣數之和

其實感覺t=100時時間1s有點極限,先轉切比雪夫距離到2e3*2e3的陣列,

二維字首和預處理,對於詢問o(1)回答即可

#includeusing namespace std;

typedef long long ll;

const int n=2010;

int t,n,m,q,mp[n][n];

int a,c,b,d,x,y,k,v;

ll sum[n][n];

ll cal(int a,int c,int b,int d)

int main()

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

}for(int i=1;i<=n+m;++i)

}for(scanf("%d",&q);q;q--)

}return 0;}/*

3 41 2 3 4

5 6 7 8

9 10 11 12

42 2 0

2 2 1

2 2 2

2 2 3

*/

④統計曼哈頓距離內掃瞄線可以轉成矩形的掃瞄線

1012 曼哈頓距離 切比雪夫距離

什麼是切比雪夫距離?什麼是曼哈頓距離?傻傻分不清,沒關係,看 曼哈頓距離設平面空間內存在兩點,它們的座標為 x1,y1 x2,y2 則dis x1 x2 y1 y2 即兩點橫縱座標差之和 切比雪夫距離 設平面空間內存在兩點,它們的座標為 x1,y1 x2,y2 則dis max x1 x2 y1 y...

總結 曼哈頓距離轉切比雪夫距離

我們在用二維樹狀陣列的時候,可以得到乙個邊與座標軸平行的矩形內點集的資訊。如果我們需要得到得到到乙個點的距離小於等於k的點的資訊呢。這些點構成的不在是邊也座標軸平行的矩形,而是乙個對角線與座標軸平行的菱形。可以通過轉化,使得整個座標軸旋轉45 然後我們菱形變成了方方正正的矩形,又可以用而二維樹狀陣列...

曼哈頓距離和切比雪夫距離轉化

曼哈頓距離和切比雪夫距離 兩個點的距離定義為點 x,y 和它周圍的 8 個點 x 1,y x 1,y x,y 1 x,y 1 x 1,y 1 x 1,y 1 x 1,y 1 x 1,y 1 距離為 1 用下 gyx 學長的圖 切比雪夫距離 dis max delta x,delta y delta ...