Редакция для Существование треугольника


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.

Автор: montes332

1. Идея

Нужно проверить, можно ли из трёх отрезков длиной a, b, c составить треугольник.

По условию это возможно тогда и только тогда, когда каждая сторона строго меньше суммы двух других:

  • a < b + c
  • b < a + c
  • c < a + b

Если все три условия выполняются, ответ YES, иначе NO.

2. Наблюдения

Главное наблюдение уже дано в условии: это и есть точный признак существования треугольника.

Почему нужна именно строгая проверка?

  • Если одна сторона равна сумме двух других, например 1, 2, 3, то получится не треугольник, а вырожденная фигура: все точки лягут на одну прямую.
  • Поэтому знак должен быть именно <, а не <=.

Примеры:

  • 1 1 1 → все условия верны, значит YES
  • 1 2 33 < 1 + 2 неверно, значит NO

3. Алгоритм

  1. Считать три числа a, b, c.
  2. Проверить три неравенства:
    • a < b + c
    • b < a + c
    • c < a + b
  3. Если все три истинны, вывести YES.
  4. Иначе вывести 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")

Комментарии

Еще нет ни одного комментария.