使得x^x達到或超過n位數字的最小正整數x是多少?n<=2000000000
對與這種較難求解的問題,我們很難想出較好的解決策略。但是,我們至少知道答案一定在1與2000000000之間,能否轉換二分查詢的思想,對答案進行二分查詢呢?當然是可以的,但在二分查詢中有比較,在二分答案中,我們也需要有比較,我們用檢查函式來實現。如果檢查出的是乙個合法的解,那麼我們嘗試找更優的解,如果檢查出的是不合法的解,我們嘗試找合法的解,這就是二分答案的思想。在這題中,我們設計的檢查函式就是x^x的數字是否超過n位,合法返回真,不合法返回假。再二分求解即可。
#include using namespace std;
int o;
bool check(int k)//檢視這個數的位數
int medium()
else//如果這個解不滿足要求
}if (check(l))//如果解合法
else//不合法 }
int main()
二分答案的思路總結:
step1: 在答案可能的範圍內[l,r]二分查詢答案,
step2: 檢查當前答案是否滿足題目的條件要求
step3: 根據判斷結果更新查詢區間,繼續判斷答案,達到最優值
備註:公式推導:
演算法基礎 二分答案
二分包括整數二分和浮點數二分,整數二分有兩種情況 兩個模板 浮點數二分只有一種情況 乙個模板 二分本質 如果能找到乙個性質將區間一分為二,一半滿足性質,一半不滿足性質,二分就可以尋找這個性質的邊界 滿足性質的邊界和不滿足性質的邊界都能找到 邊界就是我們要的答案。假設某一性質可以將乙個l到r的區間一分...
二分查詢與二分答案
主要用於在乙個單調的函式中查詢某值 連續函式的情況 若當前查詢的區間是 l,r 查詢的值是 y 函式單增 設 mid l r 2 若 f mid y 則 l mid,否則 r mid 直至 r l eps 當前查詢的區間是 l,r 查詢的值是 y 函式單增 設 mid l r 2 若 f mid y...
二分查詢和二分答案
1.解釋 優點 查詢速度快。缺點 待查表為有序表。4.時間複雜度 o log n 5.示例 p2249查詢 include include using namespace std long long n,m,a 1000005 b 100005 l,r,mid,cnt,x intmain for i...