AT_abc021_d.[ABC021D] 多重ループ

提高+/省选-

通过率:0%

AC君温馨提醒

该题目为【atcoder】题库的题目,您提交的代码将被提交至atcoder进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

新入职的高桥君作为某企业的新晋程序员被分配到了部门。他负责的第一项工作是对以下伪代码所表示的程序进行加速。

n←(标准输入)
ans←0
for i=1..n
  for j=i..n
    ans ← ans+1
显示 ans 的值

对于高桥君来说,这样的工作简直是小菜一碟。只要考虑每个 ii 的内层循环次数,并利用求和公式,就能得到 ans=n+n−1+⋯+1=n(n+1)/2ans=n+n-1+\dots+1=n(n+1)/2,用这个公式就能立刻算出答案。

高桥君成功实现了显著的加速,部门对他的期待也随之水涨船高。于是上司又给了他更进一步的任务。

这次的任务是:当 for 循环嵌套深度为 kk 时,对如下程序进行加速。

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≤n1\leq a_1\leq a_2\leq\dots\leq a_k\leq n 的整数组 (a1,a2,…,ak)(a_1,a_2,\dots,a_k) 的个数。然而,他没能想到如何计算这样的组合数。

作为他的同事,你决定帮他写出解决这个问题的程序。不过,由于答案可能非常大,请输出 ansans 对 1,000,000,007(=109+7)1,000,000,007(=10^9+7) 取模后的结果。

输入格式

输入从标准输入按以下格式给出。

nn kk

  • 第 11 行给出整数 n (1≤n≤105)n\ (1\leq n\leq 10^5)。
  • 第 22 行给出整数 k (1≤k≤105)k\ (1\leq k\leq 10^5)。

输出格式

请输出第 22 个程序最终 ansans 的值对 1,000,000,0071,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≤10001\leq n\leq 1000 且 1≤k≤10001\leq k\leq 1000 的数据集,答对可得 9999 分。
  • 对于包含上述数据集在内的所有数据集都答对,可再得 11 分。

由 ChatGPT 4.1 翻译

输入解题思路,AI测评打分。不知道怎么写?

首页