AT_abc021_d.[ABC021D] 多重ループ
提高+/省选-
通过率:0%
AC君温馨提醒
该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
新入职的高桥君作为某企业的新晋程序员被分配到了部门。他负责的第一项工作是对以下伪代码所表示的程序进行加速。
n←(标准输入)
ans←0
for i=1..n
for j=i..n
ans ← ans+1
显示 ans 的值
对于高桥君来说,这样的工作简直是小菜一碟。只要考虑每个 i 的内层循环次数,并利用求和公式,就能得到 ans=n+n−1+⋯+1=n(n+1)/2,用这个公式就能立刻算出答案。
高桥君成功实现了显著的加速,部门对他的期待也随之水涨船高。于是上司又给了他更进一步的任务。
这次的任务是:当 for 循环嵌套深度为 k 时,对如下程序进行加速。
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 的值
即使是高桥君,这次也有些犯难了,因为无法直接使用求和公式。
经过一番思考,他发现,这个程序输出的答案等于满足 1≤a1≤a2≤⋯≤ak≤n 的整数组 (a1,a2,…,ak) 的个数。然而,他没能想到如何计算这样的组合数。
作为他的同事,你决定帮他写出解决这个问题的程序。不过,由于答案可能非常大,请输出 ans 对 1,000,000,007(=109+7) 取模后的结果。
输入格式
输入从标准输入按以下格式给出。
n k
- 第 1 行给出整数 n (1≤n≤105)。
- 第 2 行给出整数 k (1≤k≤105)。
输出格式
请输出第 2 个程序最终 ans 的值对 1,000,000,007 取模后的结果。
注意不要忘记输出末尾的换行符。
输入输出样例
输入#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
说明/提示
部分分
本题设有部分分。
- 对于 1≤n≤1000 且 1≤k≤1000 的数据集,答对可得 99 分。
- 对于包含上述数据集在内的所有数据集都答对,可再得 1 分。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?