#19277. 烽火连天

烽火连天

你好!我是你的OI金牌教练。

这一次,我们将穿越回中国古代历史,结合**“长城与烽火台”的背景,设计一道考察一维数组遍历**、间隔计算以及贪心思维的 GESP 4级难度题目。


第一部分:背景知识讲解

在做题之前,让我们了解一下中国古代军事防御工程中的烽火台(Beacon Tower)

1. 烽火台的作用

烽火台是古代长城防线的重要组成部分。它是古代的“雷达”和“无线电”。

  • 白天燃烟(烽):因为白天火光不明显,主要靠浓烟传递信号(通常使用狼粪,称为“狼烟”)。
  • 夜晚举火(燧):夜晚火光清晰,点燃火炬传递信号。

2. 信息传递机制

当边境发现敌情时,第一座烽火台点燃烽火,邻近的第二座看到后立即点燃,接着传给第三座……如此接力,能在极短的时间内将警报传到千里之外的京师或大本营。

3. 传递距离的限制

为了保证信号能被准确看到,两座烽火台之间的距离不能太远。受地形、视线和天气影响,两座烽火台之间有一个最大有效可视距离。如果两座现有的烽火台距离超过了这个限制,信号就会中断,必须在中间增修新的烽火台来填补空缺。


第二部分:题目内容

题目名称:烽火连天 (Beacon Fires)

题目描述

汉朝时期,为了防御匈奴的侵扰,朝廷在边境线上修建了一系列烽火台。

我们可以将边境线简化为一条数轴。目前在边境线上已经修建了 NN 座烽火台,它们的位置坐标分别是 P1,P2,,PNP_1, P_2, \dots, P_N。为了方便管理,这些坐标是按照从小到大的顺序给出的(即 P1<P2<<PNP_1 < P_2 < \dots < P_N)。

经测试,两座烽火台之间的距离如果超过了 MM 里(古代长度单位),信号就无法准确传送。 为了确保整条防线的信号畅通(即任意相邻两座烽火台的距离都不超过 MM),大将军霍去病决定在现有的烽火台之间增修一些新的烽火台。

请你编写程序计算:为了使所有相邻烽火台(含新修的)之间的距离都不超过 MM,最少需要新修多少座烽火台?

输入格式

第一行包含两个正整数 NNMM

  • NN 表示已有烽火台的数量。
  • MM 表示最大有效可视距离。

第二行包含 NN 个用空格隔开的正整数 P1,P2,,PNP_1, P_2, \dots, P_N,表示现有烽火台的坐标。保证坐标是严格递增的。

输出格式

输出一行一个整数,表示最少需要增修的烽火台数量。

输入输出样例 #1

输入:

3 10
0 10 25

输出:

1

样例 #1 解释:

  1. 第1段001010,距离为 1010101010 \le 10,符合要求,无需增修。
  2. 第2段10102525,距离为 151515>1015 > 10,信号中断。
    • 我们需要在中间修一座。最佳方案是在坐标 2020 处修一座。
    • 这样变成了 102010 \to 20 (距离10) 和 202520 \to 25 (距离5),都符合要求。
  3. 总计:需要增修 1 座。

输入输出样例 #2

输入:

4 5
10 20 22 35

输出:

3

样例 #2 解释:

  1. 102010 \to 20:距离 10。M=5M=5
    • 需要在 15 修一座。变为 10152010 \to 15 \to 20
    • 增修数量:1。
  2. 202220 \to 22:距离 2。252 \le 5,无需增修。
  3. 223522 \to 35:距离 13。M=5M=5
    • 需要在 27, 32 修两座。变为 2227323522 \to 27 \to 32 \to 35
    • 增修数量:2。
  4. 总计1+0+2=31 + 0 + 2 = 3

数据范围

对于 100%100\% 的数据:

  • 2N10002 \le N \le 1000
  • 1M100001 \le M \le 10000
  • 0Pi1090 \le P_i \le 10^9
  • Pi<Pi+1P_i < P_{i+1}