zoukankan      html  css  js  c++  java
  • 腾讯笔试编程题,贪吃的小Q(二分查找)

    • 问题描述

    小Q的父母要出差N天,走之前给小Q留下了M块巧克力。小Q决定每天吃的巧克力数量不少于前一天吃的一半,但是他又不想在父母回来之前的某一天没有巧克力吃,请问他第一天最多能吃多少块巧克力。

    输入描述:
    每个输入包含一个测试用例。
    每个测试用例的第一行包含两个正整数,表示父母出差的天数N(N<=50000)和巧克力的数量M(N<=M<=100000)。

    输出描述:输出一个数表示小Q第一天最多能吃多少块巧克力。

    输入:
    3 7
    输出:
    4

    思路:

    二分查找变形。

    代码:

    #include<iostream>
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int n,m;
    
    int sum(int x)
    {
        int sum=0;
        for(int i=1;i<=n;i++)
        {
            sum+=x;
            x=(x+1)/2;
        }
        return sum;
    }
    
    int fun()
    {
        if(n==1)return m;
        int l=1,r=m;
        while(l<r)
        {
            int mid=(l+r+1)/2;
            if(sum(mid)==m)return mid;
            else if(sum(mid)<m) l=mid;
            else r=mid-1;
        }
        return r;
    }
    
    int main()
    {
        scanf("%d%d",&n,&m);
        int ans=fun();
        printf("%d
    ",ans);
        return 0;
    }
  • 相关阅读:
    C#中的委托和事件(续)【来自张子扬】
    C# 中的委托和事件[转自张子扬]
    .NET多线程编程入门
    python——configparser模块
    logger模块
    python——time模块
    os模块
    python——re模块
    selenium环境搭建
    iOS中的三大定时器
  • 原文地址:https://www.cnblogs.com/boboyuzz/p/10544768.html
Copyright © 2011-2022 走看看