SZ#G8O31. 分糖果

提交4 通过1
通过率25%
时间限制2000ms
内存限制512MiB
    ID: 12064 传统题 2000ms 512MiB 尝试: 4 已通过: 1 难度: 普及+/提高- 上传者: 标签>GESPGESP强化C++c++编程题算法优化与复杂度分析前缀和优化动态规划

题目描述

题目描述

小婷准备把 KK 颗完全相同的糖果分给 NN 名学生,学生编号为 1,2,,N1,2,\ldots,N

每名学生能够接受的糖果数量不同。对于学生 ii,他得到的糖果数必须在 00aia_i 之间,包括两个端点。所有 KK 颗糖果都必须分完,不能有任何剩余。

如果在两种分配方案中,至少存在一名学生得到的糖果数量不同,就认为这两种方案不同。糖果本身完全相同,因此只考虑每名学生最终得到的数量。

请计算一共有多少种合法的分配方案。由于答案可能非常大,请输出答案对 109+710^9+7 取模后的结果。

输入格式

第一行输入两个整数 N,KN,K

第二行输入 NN 个整数 a1,a2,,aNa_1,a_2,\ldots,a_N

输出格式

输出一个整数,表示合法分配方案数对 109+710^9+7 取模后的结果。

3 4
1 2 3
5

样例说明 #1

五种方案分别为 (0,1,3)(0,1,3)(0,2,2)(0,2,2)(1,0,3)(1,0,3)(1,1,2)(1,1,2)(1,2,1)(1,2,1)

1 10
9
0

样例说明 #2

唯一的学生最多只能得到 99 颗糖果,无法分完 1010 颗,因此不存在合法方案。

2 0
0 0
1

样例说明 #3

没有糖果需要分配,两名学生都得到 00 颗是唯一方案。

数据范围与约定

1N1001\le N\le1000K1050\le K\le10^50aiK0\le a_i\le K。输入中的所有数均为整数。