时间限制:1秒
空间限制:32768K
小Q的父母要出差N天,走之前给小Q留下了M块巧克力。小Q决定每天吃的巧克力数量不少于前一天吃的一半,但是他又不想在父母回来之前的某一天没有巧克力吃,请问他第一天最多能吃多少块巧克力
输入描述:
每个输入包含一个测试用例。 每个测试用例的第一行包含两个正整数,表示父母出差的天数N(N<=50000)和巧克力的数量M(N<=M<=100000)。
输出描述:
输出一个数表示小Q第一天最多能吃多少块巧克力。
输入例子1:
3 7
输出例子1:
4
#include <map>
#include <cmath>
#include <queue>
#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <sstream>
#include <time.h>
#include <vector>
#include <list>
#include <iostream>
#include<iomanip>
#include<time.h>
#define N_MAX 205
#define INF (0x3f3f3f3f)
using namespace std;
int Cal(int first, int N)
{
int sum = first, save = first;
for (int i = 1; i < N; ++i)
{
if (save % 2 == 0)
save = save / 2;
else
save = save / 2 + 1;
sum += save;
}
//cout << sum << endl;
return sum;
}
int judge(int num)
{
int i = 1, save = num;
while (save >= pow(2, i) - 1)
{
save++;
i++;
}
//cout << i - 1 << endl;
return i - 1;
}
int main()
{
int N, M;
cin >> N >> M;
int sum = 0, i = 0;
int Max = M - N + 1;
int k = judge(Max);
if(k <= N)
Max = pow(2, k);
else
Max = pow(2, k + 1);
for (i = Max; i >= 0; i--)
{
int res = Cal(i, N);
if (res <= M)
{
cout << i;
break;
}
}
return 0;
}