Codeforces Round #671 (Div. 2) B.Stairs

B. Stairs
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
Jett is tired after destroying the town and she wants to have a rest. She likes high places, that’s why for having a rest she wants to get high and she decided to craft staircases.

A staircase is a squared figure that consists of square cells. Each staircase consists of an arbitrary number of stairs. If a staircase has n stairs, then it is made of n columns, the first column is 1 cell high, the second column is 2 cells high, …, the n-th column if n cells high. The lowest cells of all stairs must be in the same row.

A staircase with n stairs is called nice, if it may be covered by n disjoint squares made of cells. All squares should fully consist of cells of a staircase.

This is how a nice covered staircase with 7 stairs looks like:
Find out the maximal number of different nice staircases, that can be built, using no more than x cells, in total. No cell can be used more than once.

Input
The first line contains a single integer t (1≤t≤1000) — the number of test cases.

The description of each test case contains a single integer x (1≤x≤1018) — the number of cells for building staircases.

Output
For each test case output a single integer — the number of different nice staircases, that can be built, using not more than x cells, in total.

Example
inputCopy
4
1
8
6
1000000000000000000
outputCopy
1
2
1
30
Note
In the first test case, it is possible to build only one staircase, that consists of 1 stair. It’s nice. That’s why the answer is 1.

In the second test case, it is possible to build two different nice staircases: one consists of 1 stair, and another consists of 3 stairs. This will cost 7 cells. In this case, there is one cell left, but it is not possible to use it for building any nice staircases, that have not been built yet. That’s why the answer is 2.

In the third test case, it is possible to build only one of two nice staircases: with 1 stair or with 3 stairs. In the first case, there will be 5 cells left, that may be used only to build a staircase with 2 stairs. This staircase is not nice, and Jett only builds nice staircases. That’s why in this case the answer is 1. If Jett builds a staircase with 3 stairs, then there are no more cells left, so the answer is 1 again.

找到漂亮阶梯的关系,下一个漂亮楼梯是中间一个大的 disjoint square 再两边加上上一个漂亮楼梯,阶数n=2n+1,cell为等差数列和n(n+1)/2。
要注意相关元素都要用long long,long long和int之间运算会出错误。

#include<bits/stdc++.h> 

using namespace std;
int main()
{ 
	int t,num;
	long long x,n,c;//相关元素都要用long long,
	                //long long和int不能一起运算 
	
	scanf("%lld",&t);
	while(t--)
	{
		c=1;
		n=1;
		num=0;
		cin >> x;
		while(1)
		{
			c=n*(n+1)/2;
			if(x>=c)
			{
				x=x-c;
			    num++;
				n=2*n+1;
			}else{
				break;
			}
			
			
		}
		printf("%d\n",num);
		
		
			
	}		
	
	return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值