e-olymp 206. Турист

Задача

Гена собирается на туристический слет учеников своей школы. В своем классе он был назначен ответственным за палатки. У себя дома он нашел 3 палатки: первая их них весит [latex]a_1[/latex] килограмм и вмещает [latex]b_1[/latex] человек, вторая весит [latex]a_2[/latex] килограмм и вмещает [latex]b_2[/latex] человек, третья весит [latex]a_3[/latex] килограмм и вмещает [latex]b_3[/latex] человек.

В классе Гены [latex]k[/latex] человек. Выясните, может ли он выбрать палатки так, чтобы в них все могли поместиться. При этом учитывайте, что выбранные палатки должны суммарно весить не более [latex]w[/latex] килограмм.

Входные данные

Первая строка содержит два целых числа [latex]k[/latex] и [latex]w[/latex] ([latex]1 \le k \le 15[/latex], [latex]1 \le w \le 30[/latex]). Вторая строка содержит шесть целых чисел: [latex]a_1,  a_2,  a_3,  b_1,  b_2,  b_3[/latex] ([latex]1 \le a_1,  a_2,  a_3 \le 15[/latex], [latex]1 \le b_1,  b_2,  b_3 \le 30[/latex]).

Выходные данные

Выведите YES, если палатки указанным образом выбрать можно, и NO в противном случае.

Тесты

Входные данные Выходные данные
10 10

5 5 6 6 4 5

YES
2 2

2 1 2 1 1 1

NO
15 30

10 3 10 5 11 7

NO
8 8

5 4 4 5 3 6

YES
5 30

6 1 12 2 10 1

NO

Код программы (вариант с тернарной операцией)

Код программы (линейный вариант)

Решение задачи

Путем полного перебора получим несколько вариантов выбора палаток: взять одну из трёх палаток, две из трёх, или все три. Зададим переменную flag типа bool, принимающую значение, равное значению логического выражения, которое истинно лишь в случае удовлетворения хотя бы одного из вариантов условиям вместимости и веса, и ложно, если ни один из вариантов не удовлетворяет этим условиям. Затем с помощью тернарной операции выведем YES, если значение flag равно true, или NO, в случае противном.

Во втором варианте кода в выводе вместо тернарной операции используются операции математические, ведь условие «если А, то B, а иначе — C» на языке математики можно представить как BA — C(A-1), A = {0,1}, и так как переменная типа  boolсодержит в себе значение либо 0, либо 1, а литералы типа char содержат не сами символы, а их числовой код из таблицы ASCII, то это вполне реализуемо. В данном коде происходит последовательное выведение трёх символов типа  char: «Y», «E» и «S» в случае  flag = 1, и «N», «O» и пробел, если  flag = 0 .  

Ссылки

E-Olymp

Ideone (вариант с тернарной операцией)

Ideone (линейный вариант)

6 thoughts on “e-olymp 206. Турист

    • Если у нужно обработать два варианта, то условный оператор должен быть один. А поскольку в любом случае приходится что-то печатать, то логичнее использовать тернарную операцию.
    • Уберите, пожалуйста, кириллицу из постоянной ссылки.
    • Ни одна из меток не является характеристикой именно этой задачи.
  1. Можно, конечно, условие запихнуть сразу в вывод, но так как Вы сделали читается лучше. Молодец.
    Я зачел как ветвление.
    Чтобы я мог зачесть как линейные алгоритмы, нужно сделать еще один вариант кода в котором не будет ни условных операторов, ни тернарных операторов.

  2. Мне интересно было посмотреть, как Вы выкрутитесь без условных операций. У Вас получилось забавно. Зачтено.

    P.S. Конечно, это только головоломка-упражнение. Не стоит без веских оснований использовать этот прием в дальнейшем.

Добавить комментарий