Pigeon SSNA want to build a tower with some wood walls. Let's describe the tower they want to make:
- A Tower can consist of different number of level.
- If a tower contain L levels then 1st level must contain L holes , 2nd level L-1 , 3rd level L-2 ….. L level contain 1 hole .
- Each room contain 3 wood walls.
See the picture below:
3 Level Tower | 4 Level tower |
Now pigeon SSNA has n wood walls. What is maximum number of level he can made.
Input
Input starts with an integer T (≤ 100000), denoting the number of test cases.
Each case starts with a line containing an integer n (1 ≤ n ≤ 1012)
Output
For each case of input you have to print the case number and expected answer.
Sample Input | Output for Sample Input |
2 15 24 | Case 1: 3 Case 2: 4 |
题意:给出一个数,代表边的条数,问能够搭建几层(要能完整的搭建,比如输入为4,那输出只能是1,不能是2),1,2层输出0. 二分查找
#include<iostream>
#include<queue>
#include<cstdio>
using namespace std;
#define LL long long
LL f[1000001];
int main()
{
int t,l,r;
LL n;
f[0]=0;
for(int i=1; i<=1000000; i++)
f[i]=f[i-1]+1+2*i;
scanf("%d",&t);
int cas=1;
while(t--)
{
l=1,r=1000000;
scanf("%lld",&n);
if(n<3)
printf("Case %d: 0\n",cas++);
else
{
int mid=(l+r)/2;
while(l<r&&f[mid]!=n)
{
if(f[mid]>n)
r=mid-1;
else if(f[mid]<n)
l=mid+1;
mid=(l+r)/2;
}
printf("Case %d: %d\n",cas++,f[mid]<=n?mid:mid-1);
}
}
return 0;
}