算法題16 貪吃的小Q 牛客網 騰訊筆試題python
題目:算法
連接:https://www.nowcoder.com/questionTerminal/d732267e73ce4918b61d9e3d0ddd9182
來源:牛客網
小Q的父母要出差N天,走以前給小Q留下了M塊巧克力。小Q決定天天吃的巧克力數量很多於前一天吃的一半,可是他又不想在父母回來以前的某一天沒有巧克力吃,請問他第一天最多能吃多少塊巧克力 測試
每一個輸入包含一個測試用例。
每一個測試用例的第一行包含兩個正整數,表示父母出差的天數N(N<=50000)和巧克力的數量M(N<=M<=100000)。
輸出一個數表示小Q第一天最多能吃多少塊巧克力。
3 7
4
解題思路:二分查找,此題爲二分查找的變形。spa
解題代碼:3d
# -*- coding:utf-8 -*- #python3 n,m=[int(i) for i in input().split()] #出差n天,m塊巧克力 #計算第一天吃s個巧克力一共須要多少個巧克力 def my_sum(s): total_sum=0 for i in range(n): total_sum+=s s=(s+1)//2 #向上取整 return total_sum low, high = 1, m # 第一天吃的巧克力必定是大於等於1,小於等於m的 while(low<=high): mid=(low+high)//2 if my_sum(mid) == m: # 若是第一天吃mid個巧克力,剛恰好吃完全部巧克力,那麼直接返回 print(mid) break elif my_sum(mid)<m: low=mid+1 else: high=mid-1 if low>high: print(low-1)