第 021 场 AtCoder Beginner Contest
D
多重ループ
AtCoder
⌀ 1704
原题
← C→
翻译中…

Problem Statement

翻译中…

新入社員の高橋君は、とある企業の新人プログラマーとして部署に配属されました。 高橋君が担当した初めての仕事は、以下の擬似コードで表されるプログラムを高速化するというものでした。

翻译中…

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≦a_1≦a_2≦…≦a_k≦n$ であるような整数の組 $(a_1,a_2,…,a_k)$ の個数に等しいということに気づきました。 しかし、彼はそのようなものの個数を数える方法を思いつきませんでした。

翻译中…

彼の同僚であるあなたは、彼の代わりにこの課題をこなすプログラムを作ってあげることにしました。 ただし、答えは非常に大きくなることがあるので、ans の代わりに ans を $1,000,000,007(=10^9+7)$ で割った余りを出力してください。

翻译中…

Input

翻译中…

入力は以下の形式で標準入力から与えられる。

翻译中…

n
k

翻译中…
  • $1$ 行目には、整数 $n (1 ≦ n ≦ 10^5)$ が与えられる。
  • $2$ 行目には、整数 $k (1 ≦ k ≦ 10^5)$ が与えられる。
翻译中…

部分点

翻译中…

この問題には部分点が設定されている。

翻译中…
  • $1≦n≦1000$ かつ $1≦k≦1000$ であるようなデータセットに正解した場合は $99$ 点が得られる。
  • 上記のデータセットを含む全てのデータセットに正解した場合はさらに $1$ 点が得られる。
翻译中…

Output

翻译中…

$1$ 行目に、$2$ つ目のプログラムにおける最終的な ans の値を $1,000,000,007$ で割った余りを出力してください。

翻译中…

末尾の改行を忘れないこと。

翻译中…

样例

Input #1
10
2
Output #1
55
Input #2
10
3
Output #2
220
Input #3
10
4
Output #3
715
Input #4
400
296
Output #4
546898535
Input #5
100000
100000
Output #5
939733670
题目信息
题号
abc021_d
时间限制
2 s
内存限制
256 MB

题面与样例版权归 AtCoder 及出题人所有;中文翻译由 AI 生成(CI 管线),如有出入请以原文为准。