跳到主要内容

P4914. 最长质量稳定段

场次:2026年5月9日-开发岗 · 来源:CodeFun2000 P4914

题目描述​

某工厂的质量检测系统在生产线上连续记录 nn 件产品的重量。称重结果依次为 w1,w2,…,wnw_1, w_2, \dots, w_n,并给定一个允许的最大波动值 DD。

定义一段连续生产的产品区间 [l,r][l, r] 是一个“质量稳定段”,当且仅当对于其中的每一个 i∈[l,r−1]i \in [l, r-1] 都满足 ∣wi+1−wi∣≤D|w_{i+1} - w_i| \le D。即相邻两件产品的重量波动幅度不超过 DD。

请你找出所有质量稳定段中最长的一段长度。

数据范围:产品个数 nn 不超过 2×1052 \times 10^5,所有测试组 nn 的总和也不超过 2×1052 \times 10^5。允许的最大波动值 DD 为 00 到 10910^9 之间的整数。每个产品重量的绝对值不超过 10910^9。

输入格式​

第一行包含一个整数 TT,表示测试数据组数。 接下来每组数据占两行: 第一行包含两个整数 nn 和 DD,分别表示当前组的产品数量与允许的最大重量波动值。 第二行包含 nn 个整数 w1,w2,…,wnw_1, w_2, \dots, w_n,依次表示每个产品的重量。

输出格式​

对于每组测试数据,输出一行一个整数,表示该组数据中最长质量稳定段的长度。

示例​

示例 1​

输入:

1
7 1
1 2 3 2 5 6 7

输出:

4

说明:

数组为 1 2 3 2 5 6 7,最大允许波动 D=1D = 1。从左到右扫描:

  • ∣2−1∣=1≤1|2-1| = 1 \le 1,当前段长度变为 2;
  • ∣3−2∣=1≤1|3-2| = 1 \le 1,长度变为 3;
  • ∣2−3∣=1≤1|2-3| = 1 \le 1,长度变为 4;
  • ∣5−2∣=3>1|5-2| = 3 > 1,当前段断开,重新从 5 开始,长度变为 1;
  • ∣6−5∣=1≤1|6-5| = 1 \le 1,长度变为 2;
  • ∣7−6∣=1≤1|7-6| = 1 \le 1,长度变为 3。 扫描过程中最大长度为 4,对应稳定段 [1,4][1, 4]。

示例 2​

输入:

1
4 0
5 5 5 6

输出:

3

说明:

D=0D = 0 要求相邻产品重量必须完全相等。数组 5 5 5 6 中: 前两个 5 差值为 ∣5−5∣=0≤0|5-5| = 0 \le 0,继续延伸; 第二个和第三个 5 差值也为 00,当前段长度变为 3; 第三个 5 到 6 的差值为 ∣6−5∣=1>0|6-5| = 1 > 0,因此从 6 重新开始一段。 最长稳定段由前三个连续的 5 组成,长度为 3。

示例 3​

输入:

2
3 1000000000
-1000000000 0 1000000000
2 0
1 2

输出:

3
1

说明:

第一组数据:n=3n = 3,D=109D = 10^9。重量为 -1000000000、0、1000000000。相邻波动分别为 ∣0−(−1000000000)∣=109≤D|0 - (-1000000000)| = 10^9 \le D 和 ∣1000000000−0∣=109≤D|1000000000 - 0| = 10^9 \le D,整个序列为一个稳定段,长度为 3。 第二组数据:n=2n = 2,D=0D = 0。重量为 1、2,差值为 ∣2−1∣=1>0|2-1| = 1 > 0,无法组成长度超过 1 的稳定段,因此输出 1。

加载评论中...