排船的問題

2021-08-07 16:49:44 字數 1193 閱讀 1996

乙個碼頭中有n艘船和n個木樁,船的長度為2*x,碼頭的寬度為m,n個木樁的位置(相對碼頭左岸的位置)會在資料中給出。船和船之間不能重疊,即每艘船的船頭不能超過上一艘船的船尾,當然也不能超出碼頭的兩岸。船和木樁之間用繩子連線,並且1個木樁只能栓1條船,繩子的一頭拴在木樁上,另一頭拴在船的中間。而船中間到木樁的距離,就是所需的繩子的長度。由你根據給出的條件,排列船的位置,使得所用到的最長的繩子最短。輸出這個最短的長度,如果碼頭排不下所有船則輸出-1。

例如:n = 3, x = 2, m = 16。三個木樁的位置為:1 3 14。船的長度為2*x = 4。你可以將三艘船放在2 6 14(指的是船中間所處的位置),這樣船和船之間既沒有重疊,並且所用的最長的繩子最短,長度為3,即第2艘船到第二根木樁的距離。

input

第1行:3個數n x m,中間用空格分隔(1 <= n <= 50000, 1 <= x <= 10^9, 1 <= m <= 10^9)。

第2 - n + 1行:每行1個數pi,對應木樁的位置(0 <= pi <= pi+1 <= m),並且給出的資料是有序的。

output

輸出最長繩子的最小值。如果碼頭排不下所有船則輸出-1。
input示例

3 2 1613

14

output示例 3

#include using namespace std;

const int maxn = 50001;

int input[maxn];

int n, x, m;

bool check(int k)

else if (head + x <= input[i] + k)

else

}if (tail > m)

return true;

}int main()

if (2*x*n > m)

int result = m;

int left = 0;

int right = m;

while (left <= right)

else

}cout << result << endl;

return 0;

}

51nod 1243 排船的問題

1243 排船的問題 codility 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 乙個碼頭中有n艘船和n個木樁,船的長度為2 x,碼頭的寬度為m,n個木樁的位置 相對碼頭左岸的位置 會在資料中給出。船和船之間不能重疊,即每艘船的船頭不能超過上一艘船的船尾,當...

51nod 1243 排船的問題

1243 排船的問題 codility 基準時間限制 1 秒 空間限制 131072 kb 分值 40 難度 4級演算法題 乙個碼頭中有n艘船和n個木樁,船的長度為2 x,碼頭的寬度為m,n個木樁的位置 相對碼頭左岸的位置 會在資料中給出。船和船之間不能重疊,即每艘船的船頭不能超過上一艘船的船尾,當...

51NOD 1243 排船問題 二分

51nod1243排船問題 題意 一 個碼 頭中有n 艘船和n 個木樁,船的長度 為2 x 碼頭的 寬度為m 乙個碼頭中有n艘船和n個木樁,船的長度為2 x,碼頭的寬度為m 乙個碼頭中有 n艘船和 n個木樁 船的長 度為2 x,碼頭 的寬度為mn個 木樁的位 置 相對 碼頭左岸 的位置 會在資料 中...