题意
你有
n
张扑克牌 你需要用这n张扑克牌不断搭出如下图的最高扑克金字塔,直到搭不出扑克金字塔。现在需要你求出这n张扑克牌按此规则可以搭出的扑克金字塔的个数
输入
输入一个
t
(1<=t<=1000),代表t组数据每组数据有一个
n
(1<=n<=1e9),代表该次你拥有n张扑克牌保证所有
n
的和不超过1e9
输出
每组输出一个数代表可搭金字塔的个数
示例
输入 | 输出 |
---|---|
5 | 1 |
3 | 2 |
14 | 1 |
15 | 3 |
24 | 0 |
1 |
思路
可以看出各层的扑克牌数构成等差数列(相邻层之间牌数相差3),那么金字塔所需的牌数就是等差数列的前n项和。
所以没想会不会卡时间直接套公式,先打表,找出牌数超过1e9的金字塔层数,然后暴力公式法:
const int MOD = 1e9 + 7;
int i;
for (; i <= 50000; i++)
{
maxn[i] = (i * (3 * i + 1)) / 2;
//debug(maxn[i]);
if ((i * (3 * i &#