vijos1453 曼哈頓距離

2022-03-06 21:28:24 字數 1062 閱讀 7622

給出n個d維空間的點。求出曼哈頓距離最大的兩個點的曼哈頓距離。兩個點(x1,x2,…,xd)、(x1,x2,…xd)的曼哈頓距離為|x1-x1|+|x2-x2|+…+|xd-xd|。

第一行兩個整數n,d(1曼哈頓距離最大的兩個點的曼哈頓距離。

4 2

2 11 4

4 55 3

6
資料規模:

60%資料,1≤n≤1000000,1≤d≤2;

100%資料,1≤n≤1000000,1≤d≤5。

先考慮一維的情況,

\(|x_1-x_1|=max(~x_1-x_1~,~-x_1+x_1~)\),

變形得:

\(|x_1-x_1|=max(~x_1-x_1~,~(-x_1)-(-x_1)~)\);

規律不明顯,再考慮二維的情況,

\(|x_1-x_1|+|x_2-x_2|=max(~x_1-x_1+x_2-x_2~,~x_1-x_1-x_2+x_2~,~-x_1+x_1+x_2-x_2~,~-x_1+x-1-x_2+x_2~)\),

還是變形得

\(|x_1-x_1|+|x_2-x_2|=max(~(x_1+x_2)-(x_1+x_2)~,~(x_1-x_2)-(x_1-x_2)~,~(-x_1+x_2)-(-x_1+x_2)~,~(-x_1-x_2)-(-x_1-x_2)~)\)

這時,我們可以輕鬆地發現規律了,即\(x\)與\(x\)同號,再看一下資料規模,\(1≤d≤5\),正好可以用二進位制。

用二進位制表示正號和負號的排列,依次列舉每一種情況,更新\(ans=max(ans,max-min)\)。

#include#includeusing namespace std;

const int n=1000001,d=6,inf=9999999;

int p[n][d];

int main()

ans=max(ans,maxs-mins);

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

return 0;

}

vijos1453曼哈頓距離

給出n個d維空間的點。求出曼哈頓距離最大的兩個點的 曼哈頓距離。兩個點 x1,x2.xd x1,x2.xd 的曼哈頓距 離被定義為 x1 x1 x2 x2 xd xd 第一行兩個正整數n,d。接下來有n,每行描述乙個點的座標。在第一行輸出曼哈頓距離最大的兩個點的曼哈頓距離。4 22 1 1 44 5...

曼哈頓距離

切雪兒距離距離是什麼?走過象棋的人就知道。這個距離其實就是max x i x j y i y j 就是兩個點之間的垂直距離和水平距離之間的最大的那個 這個就是象棋裡邊的國王和王后走的最短路 還有乙個歐式距離,別人稱之為歐幾里得距離,也就是我們初中高中學習的兩點之間的直線距離,sqrt x1 y1 2...

曼哈頓距離

題目 description 給出n個d維空間的點。求出曼哈頓距離最大的兩個點的曼哈頓距離。兩個點 x1,x2,xd x1,x2,xd 的曼哈頓距離為 x1 x1 x2 x2 xd xd input 第一行兩個整數n,d 1output 曼哈頓距離最大的兩個點的曼哈頓距離。dfs 位運算 公式推導 ...