G. 搭扑克牌塔
Problem ID: 8589
Contest ID: 5889
选做题
时间:1s 空间:256M
题目描述
大哈和小哈最近迷上了玩扑克牌,当然他们玩的是一种看起来很“新”的东西。用扑克牌搭金字塔,比如下图就是高为1、2、3的金字塔:

大哈一开始有n张扑克牌,他会尝试用手里的牌搭一个最大的金字塔,那如果还有剩咋办呢,他会用剩下的牌继续搭他能够搭成的最大的金字塔,以此往复,现在小哈想知道大哈最多可以搭几个金字塔。
输入格式
第一行一个正整数t,代表t次提问(1≤�≤10001≤t≤1000)
接下来每行给一个n (1≤�≤1091≤n≤109)
输出格式
输出t行,每行输出对于这个n最多能搭几个塔
样例输入
5 3 14 15 24 1
样例输出
1 2 1 3 0
生成每一次的搭成塔的牌数然后二分查找即可
int cz(int m){
int l=1,r=25851;
while(l < r){
int mid = (l+r) / 2;
if(m<a[mid]) r = mid;
else l = mid + 1;
}
return l-1;
}
for(long long i=1;;i++){
if((3*(1+i)*i/2-i)>1e9){
break;
}
a[i]=(3*(1+i)*i/2-i);
}