腾讯笔试:贪吃的小Q

时间限制: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;
}
发布了104 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Yanpr919/article/details/100184104