算法題16 貪吃的小Q 牛客網 騰訊筆試題


算法題16 貪吃的小Q 牛客網 騰訊筆試題

題目:

鏈接:https://www.nowcoder.com/questionTerminal/d732267e73ce4918b61d9e3d0ddd9182
來源:牛客網

小Q的父母要出差N天,走之前給小Q留下了M塊巧克力。小Q決定每天吃的巧克力數量不少於前一天吃的一半,但是他又不想在父母回來之前的某一天沒有巧克力吃,請問他第一天最多能吃多少塊巧克力

輸入描述:
每個輸入包含一個測試用例。
每個測試用例的第一行包含兩個正整數,表示父母出差的天數N(N<=50000)和巧克力的數量M(N<=M<=100000)。


輸出描述:
輸出一個數表示小Q第一天最多能吃多少塊巧克力。
示例1

輸入

3 7

輸出

4

解題思路:二分查找,此題為二分查找的變形。

解題代碼:

# -*- 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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM