#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
秒没人拍肩膀,长老将入睡;- 以下是每次拍肩的时刻及判断过程:
⏱ 拍肩过程
- 在第 6 秒拍肩
- 距离上一次(0 秒)相隔 6 秒;
- 6 < 10.5,长老仍然清醒 ✅。
- 在第 11 秒拍肩
- 距离上一次(6 秒)相隔 5 秒;
- 5 < 10.5,长老仍然清醒 ✅。
- 在第 21 秒拍肩
- 距离上一次(11 秒)相隔 10 秒;
- 10 < 10.5,长老仍然清醒 ✅。
- 在第 22 秒拍肩
- 距离上一次(21 秒)相隔 1 秒;
- 1 < 10.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
⏱️ 时间复杂度分析
- 时间复杂度:,线性遍历每个拍肩时刻;
- 空间复杂度:,用于存储时间数组。