某小區的樓房全是一樣的,並且按矩陣樣式排列。其樓房的編號1,2,3…。
當排滿一行時,從下一行相鄰的樓往反方向排號。比如:當小區排號寬度為 6 時,開始情形如下:
1 2 3 4 5 6
12 11 10 9 8 7
13 14 15 …
現在已知小區的寬度 w。問你兩個樓號 n 和 m 對應的樓房之間的最短移動距離(只能上下左右移動)。
輸入格式
輸入第一行乙個整數 w,表示小區的寬度。第二行輸入兩個整數 n,m,表示兩個樓號。
輸出格式
輸出乙個整數表示兩個樓房的距離。
題解:我們可以模擬一遍,找到每個點的具體座標,然後他們之間最短距離就 是 x 座標的距離加上 y 座標的距離。 如果我們是按照:
1 2 3 4 5 6
7 8 9 10 11 12
13 14 15 16 …
這樣計算,n的座標為 (n / w, n % w)(下標從0開始),那麼如果是奇數行, 只需要把y翻轉一下即可。
#include
#include
using
namespace std;
typedef
long
long
int ll;
struct point
;ll w;
point getpoint
(ll id)
return res;
}int
main()
樓房的距離
x星球居民小區的樓房全是一樣的,並且按矩陣樣式排列。其樓房的編號為1,2,3 當排滿一行時,從下一行相鄰的樓往反方向排號。比如 當小區排號寬度為6時,開始情形如下 1 2 3 4 5 6 12 11 10 9 8 7 13 14 15 我們的問題是 已知了兩個樓號m和n,需要求出它們之間的最短移動距...
關於 0x3f3f3f3f 的問題
0x3f3f3f3f是乙個很有用的數值,它是滿足以下兩個條件的最大整數。1 整數的兩倍不超過 0x7f7f7f7f,即int能表示的最大正整數。2 整數的每8位 每個位元組 都是相同的。我們在程式設計中經常需要使用 memset a,val,sizeof a 初始化乙個陣列a,該語句把數值 val ...
歐式距離與曼哈頓距離的區別以及曼哈頓距離的應用
歐氏距離就是我們最常用的兩點之間的直線距離。以二維空間為例,兩點 x1,y1 x2,y2 之間的歐式距離為 曼哈頓距離則表示兩個點在標準座標系上的絕對軸距之和。還是以二維空間為例,兩點 x1,y1 x2,y2 之間的曼哈頓距離為 用一張圖來區分一下兩者 圖中綠線是歐氏距離,紅線是曼哈頓距離,藍線和黃...