zoukankan      html  css  js  c++  java
  • 算法题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)
  • 相关阅读:
    JS基础语法
    JS的初步了解
    CSS初步学习
    HTML标签
    初步了解HTML
    LEGB规则
    Python面试题练习
    闭包
    Caché,Cache数据库连接并查询数据
    Caché,Cache数据库下载
  • 原文地址:https://www.cnblogs.com/yanmk/p/9313840.html
Copyright © 2011-2022 走看看