#5798. B. Mahmoud and a Triangle
B. Mahmoud and a Triangle
B. Mahmoud and a Triangle
🔺 B. Mahmoud 与三角形
时间限制: 2 秒 内存限制: 256 MB
📘 题目描述
Mahmoud 拥有 n 条线段,第 i 条线段的长度为 a_i。
Ehab 向他发起挑战: 👉 要求恰好选出 3 条线段,组成一个非退化三角形。
Mahmoud 是个谨慎的人,只有在 确定能赢 的情况下才会接受挑战。 现在请你帮助他判断: 是否存在 3 条线段,可以组成一个非退化三角形?
📐 三角形说明
-
Mahmoud 必须恰好使用 3 条线段
-
不允许拼接线段
-
不允许改变线段长度
-
非退化三角形:
- 面积 大于 0
- 等价条件:严格满足三角形不等式
🎯 任务目标
给定所有线段长度,判断是否 存在某 3 条线段,可以组成一个非退化三角形。
📥 输入格式
-
第一行:一个整数
n表示线段数量 -
第二行:
n个整数a1, a2, …, an表示每条线段的长度
📤 输出格式
-
输出一行:
"YES"—— 如果可以选出 3 条线段组成非退化三角形"NO"—— 否则
📌 数据范围
3 ≤ n ≤ 10^51 ≤ a_i ≤ 10^9
🧪 样例一
输入
5
1 5 3 2 4
输出
YES
说明
选择线段长度为 2, 4, 5:
2 + 4 > 5
满足三角形不等式,可以组成非退化三角形。
🧪 样例二
输入
3
4 1 2
输出
NO
说明
排序后为 [1, 2, 4]:
1 + 2 = 3 ≤ 4
无法构成非退化三角形。
🧠 关键数学结论(教学重点)
三条边 x ≤ y ≤ z
可以构成 非退化三角形 的充要条件是:
x + y > z
🧩 解题思路(核心观察)
-
将所有线段长度排序
-
只需检查 任意连续的三条线段
-
若存在:
a[i] + a[i+1] > a[i+2]则答案为
"YES" -
若所有连续三元组都不满足,则
"NO"
📌 为什么只看连续三个?
- 排序后,连续三条是 最有可能 满足不等式的一组
- 如果它们都不行,更分散的组合只会更差
🧠 算法复杂度
- 排序:
O(n log n) - 扫描一次:
O(n) - 满足本题数据规模要求
🧭 知识点
- 三角形不等式
- 排序后的性质
- 将“组合问题”转化为“线性扫描”
- 数学 + 贪心的经典结合