\(\\\)
對於兩個點\((x_1,y_1),(x_2,y_2)\),定義他們的曼哈頓距離為\(|x_1-x_2|+|y_1-y_2|\),即兩座標軸分別討論差值再求和。
對於曼哈頓距離相同的點,他們分布在同一橫縱截距且截距相同的直線上。
圖中每乙個正方形邊界上的整點到原點的曼哈頓距離相同。
\(\\\)
對於兩個點\((x_1,y_1),(x_2,y_2)\),定義他們的曼哈頓距離為\(max\\),即兩座標軸分別討論差值取最大。
對於切比雪夫距離相同的點,他們分布在以原點為中心的正方形邊界上。
圖中每乙個正方形邊界上的整點到原點的曼哈頓距離相同。
\(\\\)
考慮曼哈頓距離的表示式:\(|x_1-x_2|+|y_1-y_2|\),其實可以表示成:
\(\beginmax\\end\)
考慮將兩個點變化為\((x_1+y_1,x_1-y_1),(x_2+y_2,x_2-y_2)\)
那麼變化後兩點的切比雪夫距離為\(max((|(x_1+y_1)-(x_2+y_2)|,|(x_1-y_1)-(x_2-y_2)|)\)
若原來兩點曼哈頓距離為\(x_1-x_2+y_1-y_2\)或\(x_2-x_1+y_2-y_1\)時,都可以表示為\(|(x_1+y_2)-(x_2+y_2)|\)
若原來兩點曼哈頓距離為\(x_1-x_2+y_2-y_1\)或\(x_2-x_1+y_1-y_2\)時,都可以表示為\(|(x_1-y_1)-(x_2-y_2)|\)
將每乙個點\((x,y)\)轉化為\((x+y,x-y)\),新座標系下的切比雪夫距離即為原座標系下曼哈頓距離。
\(\\\)
按照剛才的思路再還原回去即可。
將每乙個點\((x,y)\)轉化為\((\frac,\frac)\),新座標系下的曼哈頓距離即為原座標系下切比雪夫距離。
這個轉化一般比較常用,曼哈頓距離一般可以通過排序字首和的方式降低計算複雜度。
注意到除法如果向下取整可能會使答案不正確,所以考慮先不除以\(2\),最後求完答案再除以\(2\)也是一樣的,形象的理解可以說成,曼哈頓座標系是通過切比雪夫座標系旋轉\(45^\)後,再縮小到原來的一半得到的。
\(\\\)
有\(n\)個二位平面上的點,定義每乙個點到其八連通的點的距離為\(1\)。\(\\\)選乙個點,使得剩下所有點到該點的距離之和最小,求出這個距離之和。
題意即為求切比雪夫距離之和最小,暴力的做法是\(n^2\)的。
考慮將切比雪夫距離轉化為曼哈頓距離,我們將橫縱座標分開排序求字首和,這樣既可快速求出,以乙個點為中心,其他點到這個點的曼哈頓距離之和。
具體的做法是將兩個座標分開討論,每次找到當前點在排序後陣列的位置\(p\)。
那麼它前面的點座標都小於當前點,累加的答案為\(p\times x[i]-sum_p\)。
後面的點的座標都大於當前點,反過來累加答案,為\((sum_n-sum_p)-(n-p)\times x[i]\)
對所有的點都求一遍,取最小值即可,複雜度\(\text o(nlogn)\)。
\(\\\)
#include#include#include#include#include#include#include#define n 100010
#define r register
#define gc getchar
#define inf 900000000000000000
using namespace std;
typedef long long ll;
inline ll rd()
while(isdigit(c))
return f?-x:x;
}ll n,ans=inf,x[n],y[n],sx[n],sy[n],sumx[n],sumy[n];
int main()
sort(sx+1,sx+1+n);
sort(sy+1,sy+1+n);
for(r ll i=1;i<=n;++i)
for(r ll i=1,res;i<=n;++i)
printf("%lld\n",ans);
return 0;
}
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 ...