#PD019C. 选拔小队 (team)

选拔小队 (team)

选拔小队 (team)

  • 输入:team.in
  • 输出:team.out
  • 时间限制:1 s
  • 内存限制:128 MB

题目描述

信息学训练营中共有 nn 名同学,第 ii 名同学的能力值为 aia_i。

教练希望从中选出恰好 mm 名同学组成一支小队。一支小队被认为是优秀小队,当且仅当满足以下条件:

  • 小队中恰好有 mm 名同学。
  • 小队中任意两名同学的能力值都不相同。
  • 小队中任意两名同学的能力值之差的绝对值严格小于 mm。

两支小队被认为不同,当且仅当被选中的同学集合不同。

请你计算一共有多少支不同的优秀小队。由于答案可能很大,请对 109+710^9+7 取模。

输入格式

从文件 team.in 中读入数据。

第一行包含两个整数 n,mn,m。

第二行包含 nn 个整数 a1,a2,…,ana_1,a_2,\dots,a_n,表示每名同学的能力值。

输出格式

输出到文件 team.out 中。

输出一个整数,表示优秀小队的数量对 109+710^9+7 取模后的结果。

样例1输入

5 3
4 2 2 3 6

样例1输出

2

样例1解释

需要选出 33 名同学,且能力值互不相同。

能力值为 2,3,42,3,4 的三名同学可以组成优秀小队,因为三个能力值互不相同,且最大能力值与最小能力值之差为 4−2=24-2=2,严格小于 m=3m=3。

由于能力值为 22 的同学有两名,因此可以分别选择其中一人,与能力值为 33 和 44 的同学组成小队,共有 22 种方案。

能力值包含 66 的选择均不满足条件,因此答案为 22。

数据范围

对于所有数据,1<=m<=n<=2000001 <= m <= n <= 200000,1<=ai<=1091 <= a_i <= 10^9。每个测试点 55 分。

特殊性质 A:保证所有同学的能力值两两不同。