SP10509 CRDS - Cards 题解
修改记录
upd on 2024.07.17:在表格中添加
upd on 2024.07.19:添加公式中的乘号。
upd on 2024.07.20:修改连等式,并使用 \aligned 环境;添加文中的加粗强调。
题目
题目传送门:SP10509 CRDS - Cards
前言
这是本人第
正文
这是一个找规律的题目。
| 先来看看前几个情况(图片就不画了): | 层数 |
|||||||
|---|---|---|---|---|---|---|---|---|
| 所需卡片数 |
找不着规律?
我们接着分析一下:
先来看看倒 V 型的组合,每个这样的组合需要
- 在一个
1 层的金字塔中,从上到下总共有1 个这样的组合。 - 在一个
2 层的金字塔中,从上到下总共有1+2=3 个这样的组合。 - 在一个
3 层的金字塔中,从上到下总共有1+2+3=6 个这样的组合。 - 在一个
4 层的金字塔中,从上到下总共有1+2+3+4=10 个这样的组合。
这就可得,在一个
也就是:
根据等差数列求和公式得:
当然,实际的卡牌数(记作
倒 V 型组合搞定了,接下来就是分隔每层的平铺卡片了。
还是跟前面一样,这里列出了前面
- 在一个
1 层的金字塔中,没有这样的卡片。 - 在一个
2 层的金字塔中,从上到下总共有1 张这样的卡片。 - 在一个
3 层的金字塔中,从上到下总共有1+2=3 张这样的卡片。 - 在一个
4 层的金字塔中,从上到下总共有1+2+3=6 张这样的卡片。
规律也跟之前一样,只是只累加到
也就是:
根据等差数列求和公式得:
我们把总的卡片数记作
这就是最终的化简结果(没必要再拆括号了)。
把公式代入代码就可以了,然后还要记得去把
大功告成啦!
代码
//这是一个平平无奇的水印
#include <iostream>
using namespace std;
long long t,m;
int main()
{
cin >> t;
while(t--)
{
cin >> m;
cout << ((3*m+1)*m/2)%1000007 << endl;
}
return 0;
}
有错误请大家指出哈。