搭扑克牌塔题解

G. 搭扑克牌塔

Problem ID: 8589

Contest ID: 5889

选做题

时间:1s 空间:256M

题目描述

大哈和小哈最近迷上了玩扑克牌,当然他们玩的是一种看起来很“新”的东西。用扑克牌搭金字塔,比如下图就是高为1、2、3的金字塔:

c8f889835ab0788603a3c97f750b5560a2dca9f4.png

大哈一开始有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);
	}
4 个赞