#abc021d. [abc021_d]多重ループ
[abc021_d]多重ループ
问题文
新入职员工高桥君被分配到某公司作为新人程序员。高桥君的第一份工作是优化以下伪代码所表示的程序的速度。
n←(标准输入)
ans←0
for i=1..n
for j=i..n
ans ← ans+1
显示 ans 的值
对于高桥君来说,这样的工作是小菜一碟。考虑内部循环次数对每个 的总和公式,可以得到 ,利用这个公式,我们可以很快得到答案。
部门对高桥君成功实现的极大加速非常期待。因此,上司决定给他更多的工作。
这项工作的内容是优化以下程序在 层循环嵌套的情况下的速度。
n←(标准输入)
k←(标准输入)
ans←0
for a_1=1..n
for a_2=a_1..n
for a_3=a_2..n
…
for a_k=a_{k-1}..n // 假设 a_0=1
ans ← ans+1
显示 ans 的值
即使是高桥君对此也感到有些困惑。原因是无法使用总和公式。
经过一番思考,他意识到该程序的输出是满足 的整数组 的数量。然而,他无法想出一种方法来计算这样的组合数量。
作为他的同事,你决定替他完成这个任务。然而,答案可能非常大,因此请输出 ans 除以 的余数。
输入
输入通过标准输入给出,格式如下:
- 第一行包含一个整数 。
- 第二行包含一个整数 。
部分分
本问题设置了部分分。
- 当 并且 时,得到 99 分。
- 在包括上述数据集的所有数据集中得到正确答案时,额外得到 1 分。
输出
在一行中输出第二个程序中最终 ans 的值除以 的余数。
请记住输出末尾的换行符。
示例1
10
2
输出1
55
示例2
10
3
输出2
220
示例3
10
4
输出3
715
示例4
400
296
输出4
546898535
示例5
100000
100000
输出5
939733670