#12065. A: Timeout 比赛编号408

A: Timeout 比赛编号408

当前没有测试数据。

🧩 Problem A: Timeout

📌 任务总览

项目 限制
时间限制 2 秒
内存限制 1024 MiB
分值 150 分

📝 题目描述

在高桥村,有一位长老非常容易入睡。

长老会在 上一次被拍肩膀后经过 S + 0.5 时立刻入睡。

  • 起初,长老是清醒的,刚被拍过一次肩膀。
  • 接下来,会在 恰好 N 次指定时间点 再次拍肩膀。
  • i 次拍肩发生在 ​从现在起 T_i 秒后​。

请判断,从现在到最后一次拍肩(即 T_N 秒时刻),长老是否始终保持清醒。


📥 输入格式

输入包含:

N S
T₁ T₂ ... Tₙ
  • N:拍肩次数 $(1 ≤ N ≤ 100)$
  • S:最长保持清醒时间 $S$,即超过 $S+0.5$ 秒未被拍肩就会入睡 $(1 ≤ S ≤ 100)$
  • `T₁ < T₂ < ... < Tₙ$:每次拍肩的时间(单位秒),$1 ≤ T_i ≤ 1000$

📤 输出格式

  • 若长老从现在到 Tₙ 秒内始终保持清醒,输出:
Yes
  • 否则输出:
No

📚 输入输出样例

样例 1

输入:
5 10
6 11 21 22 30

输出:
Yes

📘 样例 1 分析说明

输入:

5 10
6 11 21 22 30
  • 初始状态:长老在 0 秒被第一次拍肩,当前清醒;
  • S = 10,意味着如果连续超过 10.5 秒没人拍肩膀,长老将入睡;
  • 以下是每次拍肩的时刻及判断过程:

⏱ 拍肩过程

  1. 在第 6 秒拍肩
    • 距离上一次(0 秒)相隔 ​6 秒​;
    • 6 < 10.5​,长老仍然清醒 ✅。
  2. 在第 11 秒拍肩
    • 距离上一次(6 秒)相隔 ​5 秒​;
    • 5 < 10.5​,长老仍然清醒 ✅。
  3. 在第 21 秒拍肩
    • 距离上一次(11 秒)相隔 ​10 秒​;
    • 10 < 10.5​,长老仍然清醒 ✅。
  4. 在第 22 秒拍肩
    • 距离上一次(21 秒)相隔 ​1 秒​;
    • 1 < 10.5​,长老仍然清醒 ✅。
  5. 在第 30 秒拍肩
    • 距离上一次(22 秒)相隔 ​8 秒​;
    • 8 < 10.5​,长老仍然清醒 ✅。

✅ 结论:

从第 0 秒开始到最后一次拍肩(30 秒)之间,​每次拍肩的间隔都不超过 10 秒​,即始终满足 间隔 ≤ S

因此,输出:

Yes

样例 2

输入:
2 100
1 200

输出:
No

样例 3

输入:
10 22
47 81 82 95 117 146 165 209 212 215

输出:
No

🔍 题目分析与解法

✅ 思路:差分判断 + 模拟

  • 记录上一次被拍肩的时间(初始化为 0);
  • 遍历每个拍肩时刻 T[i]
    • 如果 T[i] - prev > S,说明中间有间隔超过 S + 0.5 秒,长老会睡着 → 输出 No
    • 否则更新 prev = T[i]
  • 所有拍肩都合法 → 输出 Yes


⏱️ 时间复杂度分析

  • 时间复杂度​:O(N)O(N),线性遍历每个拍肩时刻;
  • 空间复杂度​:O(N)O(N),用于存储时间数组。