#P13849. [diverta2019_2]Balanced Piles

    ID: 13050 传统题 1000ms 256MiB 尝试: 1 已通过: 1 难度: 6 上传者: 标签>CF1900动态规划组合数学前缀和模运算

[diverta2019_2]Balanced Piles

题目描述

NN 个格子横向排列,从左到右依次编号为 11NN。高桥君打算在这些格子上堆积木。初始时,每个格子上都没有积木。

高桥君希望将积木堆得均匀,他会重复以下操作,直到每个格子上都恰好堆有 HH 个积木为止:

  • 设当前所有格子中积木数的最大值为 MM,最小值为 mm。从所有积木数为 mm 的格子中任选一个(如果有多个可以任选),在该格子上堆若干个积木,使得该格子的积木数变为 MM 以上且不超过 M+DM+D,即堆到 MMM+1M+1\dotsM+DM+D 中的某一个数。

请你帮高桥君计算,经过若干次上述操作后,使所有格子上都恰好有 HH 个积木的方法总数。由于答案可能非常大,请输出对 109+710^9+7 取模后的结果。

输入格式

输入为一行,包含三个整数:

NN HH DD

输出格式

输出使所有格子上都恰好有 HH 个积木的方法总数,对 109+710^9+7 取模。

输入输出样例 #1

输入 #1

2 2 1

输出 #1

6

输入输出样例 #2

输入 #2

2 30 15

输出 #2

94182806

输入输出样例 #3

输入 #3

31415 9265 3589

输出 #3

312069529

说明/提示

限制条件

  • 2N1062 \leq N \leq 10^6
  • 1DH1061 \leq D \leq H \leq 10^6
  • 输入均为整数

样例解释 1

(格子 11 上的积木数,格子 22 上的积木数)可以按如下方式变化:

  • (0,0)(0,1)(1,1)(1,2)(2,2)(0, 0) \to (0, 1) \to (1, 1) \to (1, 2) \to (2, 2)
  • (0,0)(0,1)(1,1)(2,1)(2,2)(0, 0) \to (0, 1) \to (1, 1) \to (2, 1) \to (2, 2)
  • (0,0)(0,1)(2,1)(2,2)(0, 0) \to (0, 1) \to (2, 1) \to (2, 2)
  • (0,0)(1,0)(1,1)(1,2)(2,2)(0, 0) \to (1, 0) \to (1, 1) \to (1, 2) \to (2, 2)
  • (0,0)(1,0)(1,1)(2,1)(2,2)(0, 0) \to (1, 0) \to (1, 1) \to (2, 1) \to (2, 2)
  • (0,0)(1,0)(1,2)(2,2)(0, 0) \to (1, 0) \to (1, 2) \to (2, 2)

因此,使所有格子上都恰好有 22 个积木的方法总数为 66

样例解释 3

注意要输出对 109+710^9+7 取模后的结果。