JavaScript-编程

题目描述

1. 小X的父母出差N天,给他留下M块糖果。小X决定每天吃的糖果数量不少于前一天吃的一半,但是他又不想在父母回来之前的某一天没有糖果吃,请问他一天最多吃多少块糖果

输入描述

每个输入包含一个测试用例。

每个测试用例的第一行包含两个整数,表示父母出差的天数N(N<=50000)和糖果的数量M(N<=M<=10000)

输出描述:

输出一个数表示小X第一天最多能吃多少块糖果


示例1

输入

3 7

输出

4

基本思路就是先用二分查找找到第一天吃的糖果的数,然后统计一共吃的糖果的个数,与实际给的总共的糖果个数比较,需要注意的是,糖果都是整数个的,然后假如有一天吃了一块,后面就总是吃一块的,因为0.5块也是要吃一块的。

    var lineNext = readline();
    var lines = lineNext.split(" ");
    var N = parseInt(lines[0])
    var M = parseInt(lines[1])
    var low=1;
    var high=M;
    while(low+1<high){
        var mid = low+Math.floor((high-low)/2);
        if(Fn(mid,N,M)){
            low=mid;
        }else{
            high = mid-1;
        }
    }
    if(Fn(low+1,N,M)){
        print(low+1)
    }else{
        print(low)
    }


    function Fn(v,N,M){
        var res = v;
        for (var i = 1; i < N; i++) {
            if (v == 1) {
                res += N - i;//等于1时候,以后每天都吃一块
                break;
            } else {
                res += Math.floor((v + 1) / 2);
                v = Math.floor((v + 1) / 2);
            }
        }
        return res <= M;
    }

猜你喜欢

转载自blog.csdn.net/LXY224/article/details/79938949
今日推荐