二分查詢 HDU2178

2021-06-29 05:10:24 字數 626 閱讀 9677

二分查詢也叫折半查詢,基本思路就像猜數字遊戲

比如你要猜乙個1000以內的正整數,每次只需別人告訴你你說的數比目標數字大還是小。

猜的方法就是「二分」。首先你可以猜500,除了運氣特別好正好可以猜中之外,不管別人說「大了」還是「小了」,你可以把可行範圍縮小一半:如果「大了」,那麼答案在1~499之間;如果小了,那麼答案在501~1000之間。只要每次猜可行區間的中點,那麼就可以吧範圍縮小一半。

由於log2 1000<10,那麼10次之內必定會猜到目標數字。

根據乙個題來說吧。

hdu 2178 猜數字:

題意就是求所給次數可以猜到的最大數字,尋找可行範圍的上界。

也就是說如果猜10次的話,可以猜到的最大數字為1023。

(2^n-1)為可行範圍上界,(log2 上界的數值)為猜到目標數字需要的次數。

二分查詢可以在有序陣列中查詢目標元素,相比每個元素遍歷二分查詢更快。

還可以在陣列中找到某個元素第一次出現的位置,例如陣列1,4,8,8,8,8,8,9。找到8第一次出現的位置。我們可以從紅色位置向前搜尋,同理向後搜尋就可以找到最後出現的位置了。

**不上了,如果以上有什麼錯誤,歡迎指正。

貼乙個部落格**,裡面二分查詢的用法寫的很詳細,以供參考:

hdu 2141 二分查詢

感覺自己一直木有掌握二分的思想,看完這道題後,題意很簡單,想直接暴力列舉,但是寫到一半,就放棄了,因為看到了資料 500 500 500,再加上多組詢問 很可能就掛了,其實知道可以二分做,但就是不知道咋弄.自己還太菜了 果斷參考別人的解題報告,自己敲了兩邊,第一遍超時,第二遍過了 a b c x 也...

HDU2141(二分查詢)

題意 給出資料x,然後從a,b,c三個陣列中找到滿足關係a i b j c k x的等式即可輸出yes,否則輸出no。首先將a,b陣列相加,然後合併的陣列和c陣列採用二分查詢t x c k 的值是存在a,b合併的陣列中 要對合併的陣列進行排序 hdu2141 include include incl...

迭代二分查詢二分查詢

在寫這篇文章之前,已經寫過了幾篇關於改迭代二分查詢主題的文章,想要了解的朋友可以去翻一下之前的文章 bentley在他的著作 writing correct programs 中寫道,90 的計算機專家不能在2小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...