版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiang_1603/article/details/88255842
时间限制:1秒
空间限制:32768K
小Q的父母要出差N天,走之前给小Q留下了M块巧克力。小Q决定每天吃的巧克力数量不少于前一天吃的一半,但是他又不想在父母回来之前的某一天没有巧克力吃,请问他第一天最多能吃多少块巧克力
输入描述:
每个输入包含一个测试用例。 每个测试用例的第一行包含两个正整数,表示父母出差的天数N(N<=50000)和巧克力的数量M(N<=M<=100000)。
输出描述:
输出一个数表示小Q第一天最多能吃多少块巧克力。
输入例子1:
3 7
输出例子1:
4
二分查找!!
扫描二维码关注公众号,回复:
5649920 查看本文章
#include <cstdio>
int n, m;
//计算第一天吃s块,n天最少一共吃掉多少块
int total(int s)
{
int sum = 0;
for(int i = 0; i < n; i++)
{
sum += s;
s = (s + 1) / 2; //向上取整
}
return sum;
}
int main()
{
scanf("%d%d", &n, &m);
int low = m / n, high = m, mid; //第一天最少吃m/n块,最多吃m块
bool flag = false;
while(low <= high)
{
mid = (low + high + 1) / 2;
int t = total(mid);
if(t == m)
{
printf("%d", mid);
flag = true;
break;
}
else if(t > m) high = mid - 1;
else low = mid + 1;
}
if(!flag) printf("%d", mid);
return 0;
}