Редакция для Существование треугольника
Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.
Submitting an official solution before solving the problem yourself is a bannable offence.
Автор:
1. Идея
Нужно проверить, можно ли из трёх отрезков длиной a, b, c составить треугольник.
По условию это возможно тогда и только тогда, когда каждая сторона строго меньше суммы двух других:
a < b + cb < a + cc < a + b
Если все три условия выполняются, ответ YES, иначе NO.
2. Наблюдения
Главное наблюдение уже дано в условии: это и есть точный признак существования треугольника.
Почему нужна именно строгая проверка?
- Если одна сторона равна сумме двух других, например
1, 2, 3, то получится не треугольник, а вырожденная фигура: все точки лягут на одну прямую. - Поэтому знак должен быть именно
<, а не<=.
Примеры:
1 1 1→ все условия верны, значитYES1 2 3→3 < 1 + 2неверно, значитNO
3. Алгоритм
- Считать три числа
a,b,c. - Проверить три неравенства:
a < b + cb < a + cc < a + b
- Если все три истинны, вывести
YES. - Иначе вывести
NO.
4. Почему это работает
По условию задачи треугольник существует тогда и только тогда, когда каждая из трёх сторон меньше суммы двух остальных.
Значит:
- если все три неравенства выполнены, то из данных реек можно сложить треугольник;
- если хотя бы одно неравенство нарушено, то одна из сторон слишком длинная, и треугольник составить нельзя.
Именно это и проверяет алгоритм, поэтому он всегда даёт правильный ответ.
5. Сложность
Алгоритм выполняет только несколько сравнений.
- Время:
O(1) - Память:
O(1)
6. Код на C++17
#include <iostream>
using namespace std;
int main() {
long long a, b, c;
cin >> a >> b >> c;
if (a < b + c && b < a + c && c < a + b) {
cout << "YES";
} else {
cout << "NO";
}
return 0;
}
7. Код на Python 3
a, b, c = map(int, input().split())
if a < b + c and b < a + c and c < a + b:
print("YES")
else:
print("NO")
Комментарии