题目描述:
牛牛是个非常热心的人,所以他有很多的朋友。这一天牛牛跟他的n个朋友一起出去玩,在出门前牛牛的妈妈给了牛牛k块糖果,牛牛决定把这些糖果的一部分分享给他的朋友们。由于牛牛非常热心,所以他希望他的每一个朋友分到的糖果数量都比牛牛要多(严格意义的多,不能相等)。牛牛想知道他最多能吃到多少糖果?
解题思路:
二分
left=0,right=k
check函数:
假定自己留x块糖果
则朋友们每人至少x+1块糖果
(x+1)*n+x>=k
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 返回牛牛能吃到的最多糖果数 * @param n long长整型 * @param k long长整型 * @return long长整型 */ long long Maximumcandies(long long n, long long k) { // write code here long long left=0,right=k,ans=0; while(left<=right) { long long mid=left+(right-left)/2; if(check(n,k,mid)) { ans=mid; left=mid+1; } else right=mid-1; } return ans; } bool check(long long n,long long k,long long mid) { return (__int128)(mid + 1) * n + mid <= k; } };
题目解答代码是在看过直播之后敲得,做题过程中完全没有想到二分问题,而且照着敲还敲错了一部分,完全没有发现自己敲错中文括号,导致(__int128)完全无法通过,百度了好久,自己加了头文件,折腾了好久,才通过!
新手小菜鸡,慢慢加油!