SPOJ - PHT

Pigeon SSNA want to build a tower with some wood walls. Let's describe the tower they want to make:

  1. A Tower can consist of different number of level.
  2. If a tower contain levels then 1st level must contain  holes , 2nd level L-1 , 3rd level L-2 ….. L level contain 1 hole .
  3. Each room contain 3 wood walls.

See the picture below:

3 level4level
3 Level Tower4 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
 
 
题目大意:
给你n个木棍,求能搭成多少层的塔
解题思路:
很简单,简单二分一下就好,但是注意数据太大爆long long
输入的时候要用lld,用I64d会RE(比赛的时候错了好几发,哇,贼赤激)
 
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n;
int check(int x){
    double res = x * 3;
    res += (double)(x - 1)*(2 + 2*(x-1))/2.0;
    if(res > n)
        return 0;
    return 1;
}

int32_t main(){
    int T, icase = 1;
    scanf("%lld", &T);
    while(T--){
        scanf("%lld", &n);
        int l = 0, r = 1e12;
        for(int i = 0; i < 500; i++){
            int mid = (l + r) >> 1;
            if(check(mid)){
                l = mid;
            }
            else{
                r = mid;
            }
        }
        printf("Case %lld: %lld\n",icase++, l);
    }
}

Case 1: 3
Case 2: 4
  
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值