三分查詢 2020icp南京F

2022-07-10 15:51:11 字數 593 閱讀 9822

2020icpc南京f.firework

製作乙個烟花需要n分鐘,把當前所有烟花全部點燃需要m分鐘,每乙個烟花有p*1e-4的概率是個好烟花,求在最優的操作策略下,點燃到乙個好烟花的時間期望是多少?(n,m<1e9,p<=10000)

輸入:t組資料,每組資料為n,m,p

顯然,當選取每製作x個hanabi點燃一次的時間期望為 (n*x+m)/(1-pow(1-p/10000),x)

可以發現這是乙個先遞減後遞增的函式,那單峰函式用三分演算法可求解。

以前不知道這個,做了這題才知道。

while(lusing namespace std;

#define f(i,a,b) for(int i=a;i<=b;++i)

#define ll long long

#define n 500005

inline ll read()

ll n,m,p;

long double cal(ll x)

void solve()

printf("%.10lf\n",cal(l));

}int main()

三分查詢總結

演算法背景 二分與三分類似。二分法利用的是函式的單調性。而三分法利用的是函式的單峰性。二次函式就是乙個典型的單峰函式。三分法與二分法一樣,它會不斷縮小答案所在的求解區間,直到求出極值。如圖 演算法流程 1 設當前求解的區間為 l,r 令 m1 l r l 3,m2 r r l 3 2 接著我們計算這...

三分查詢演算法

輸入 n個元素的公升序陣列 a 1 n 和元素x 輸出 如果x a j 1 j n,則輸出就,否則輸出 0.步驟 1 先把整個區間的 n 3的值 lmid n 3 left。2 再取右側區間的中間值 rmid lmid right,從而把區間分為三個小區間。3 我們a lmid 的值與 x進行比較,...

二分查詢,三分查詢

今天看分治法那塊,裡面提到了二分搜尋,想想好多年沒寫這個簡單的程式了,話說當年第乙個真正意義上理解的是三分查詢,即二分搜尋的拓展,所以根據分治法的思想,重新寫了二分搜尋,三分搜尋這兩個程式,突然回憶起來,當初對m l r 2,竟一點沒有懷疑過,那些分割點是怎麼求出來的,要提醒像我一樣初寫程式的朋友,...