新手场第一题——热心的牛牛
热心的牛牛
https://ac.nowcoder.com/acm/contest/9223/A
题目描述:
牛牛是个非常热心的人,所以他有很多的朋友。这一天牛牛跟他的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)完全无法通过,百度了好久,自己加了头文件,折腾了好久,才通过!
新手小菜鸡,慢慢加油!
