Codeforces #639(div2) [B. Card Constructions]

[传送门]

题意

你有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 &#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值