二分解決瓶中毒藥問題

2021-10-24 19:34:07 字數 665 閱讀 6674

題目:

分析:假設不管毒藥和水混合,不管毒藥濃度為多少,小鼠喝過就會死。

現進行這樣的實驗(原理二分法):1000瓶水,先將前500的混合,讓乙隻小鼠喝。

如果死亡,則前500有毒藥,後500瓶直接排除;若不死亡,則後500瓶有毒藥。下次將進行250瓶的混合,並試毒選擇。

以此類推,二分結束的條件是begin = end 最後直接輸出begin即毒藥的標籤號。題目資料設定的也比較巧妙, 2^10 = 1024 > 1000,因此10只老鼠可以滿足試毒要求。

問題的時間複雜度o(log n), 空間複雜度o(1)。

解答:

#include

#include

using

namespace std;

intselectpoison

(vector<

bool

>

& bottle)

if(ispoison) end = middle;

else begin = middle +1;

}return begin;

}int

main()

使用並行二分法解決1000瓶酒找毒酒問題

從1000瓶酒中找出1瓶毒酒是一道著名的面試題,原題如下 某酒主人要宴請客人,他共有1000瓶酒,其中1瓶有毒。一旦喝了毒酒後,會在一天後發作,現在如果我們用小白鼠進行檢測,問一天內最少需要多少只小白鼠才可以檢測出哪瓶有毒?此題的常規思路是10只老鼠按從左到右的順序一字排好,每桶酒也編上號1到100...

三分解決問題

描述 我們都知道ycb老師是乙個陽剛的人,不僅如此,ycb老師還是乙個很很紳士的人,一天他看到乙個妹子被乙個箱子擋住了路,於是他想移動這個箱子,幫助妹子清理路障,但是要是用力過猛會的話,ycb老師怕妹子認為自己是乙個粗魯的人,於是他想知道最小移動箱子的力是多大?ps 忽略轉動 地面水平,箱子看成質點...

二分查詢問題

常見的二分查詢問題 1 給定排序陣列求乙個給定數在陣列中的下標,如果不存在就返回應該插入的位置 int searchinsert int a,int n,int target else return start 2 給定乙個 排序陣列,然後經過旋轉後,查詢給定值是否在陣列中。思路 1 先看左邊有序還...