1243 排船的問題
codility
基準時間限制:1 秒 空間限制:131072 kb 分值: 40
難度:4級演算法題
乙個碼頭中有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)。output第2 - n + 1行:每行1個數pi,對應木樁的位置(0 <= pi <= pi+1 <= m),並且給出的資料是有序的。
輸出最長繩子的最小值。如果碼頭排不下所有船則輸出-1。input示例
3 2 1613output示例14
3題解:很明顯可以二分答案,不清楚怎麼dp。。。。。據說能o(n)過,不知道怎麼操作。
ac**
#include #include #include #include #include #include #include #include #include typedef long long ll;
using namespace std;
const ll maxn = 55555;
ll loc[maxn];
bool can(ll m, ll n, ll x, ll y)
if(r <= y)
return true;
else
return false;
}int main()
ll l = 0, r = m;
while(l < r)
printf("%lld\n", l);
return 0;
}
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個 木樁的位 置 相對 碼頭左岸 的位置 會在資料 中...
51nod 1243 排船的問題 鍛鍊思維的好題
乙個碼頭中有n艘船和n個木樁,船的長度為2 x,碼頭的寬度為m,n個木樁的位置 相對碼頭左岸的位置 會在資料中給出。船和船之間不能重疊,即每艘船的船頭不能超過上一艘船的船尾,當然也不能超出碼頭的兩岸。船和木樁之間用繩子連線,並且1個木樁只能栓1條船,繩子的一頭拴在木樁上,另一頭拴在船的中間。而船中間...