解题思路
这道题本质上是在长度为 n 的序列上进行分组。
每个人只能有两种情况:
- 自己单独成组;
- 和前一个人组成一组,即选择相邻下标 (i−1,i),并且满足:
P4952.第1题-分组计数
题目内容
给定 n 个人的权值序列 a1,a2,…,an,保证 a 已按非降序排列。
需要将所有人分成若干组,每组人数只能为 1 或 2。规则如下:
- 单人一组不受限制。
- 两人一组时,必须选择下标相邻的两个人 (i−1,i),并满足 ∣ai−ai−1∣≤K。
请你计算共有多少种合法的分组方案,答案对 109+7 取模。
输入描述
每个测试文件均包含多组测试数据。第一行输入一个整数 T (1≤T≤105) 表示数据组数,每组测试数据描述如下:
第一行输入两个整数 n,K (1≤n≤2×105, 0≤K≤109)。
第二行输入 n 个整数 a1,a2,…,an (∣ai∣≤1018),并保证 a1≤a2≤⋯≤an。
保证所有测试中 n 的总和不超过 2×105。
输出描述
输出 T 行,每行输出一个整数,表示合法分组方案数对 109+7 取模后的结果。
样例1
输入
3
4 1
1 2 4 10
4 0
1 2 3 4
5 2
1 1 2 4 7
输出
2
1
5
说明
第一组:只有相邻的 (1,2) 满足差值不超过 K,因此方案为:全单人;或 (1,2) 配对其余单人,共 2 种。
第二组:相邻差均大于 0,无法配对,只能全单人,答案为 1。