Top.Mail.Ru
Ответы
Аватар пользователя
7лет
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+4

Решить на паскале

Электрик-гном Меггакрут получил задание – починить опоры линии электропередач, стоящие на стенах Штормграда. К сожалению, некоторые участки стены так и не восстановили после осады, проходившей 150 лет назад, поэтому соседние участки стены могут иметь разную высоту. Зная о подобном положении дел, Меггакрут взял раскладную лестницу, способную раздвигаться от 0 до L метров, чтобы с ее помощью перемещаться между разными участками. Также он взял с собой H бутылок зелья левитации, чтобы с помощью него можно было безболезненно спрыгнуть, если вдруг не хватит длины лестницы на спуск. Одна бутылка тратится на один спуск. Известно, что Меггакрут имеет S выносливости. Выносливость тратится на единицу за каждый метр подъема. При спуске по лестнице и с помощью зелья выносливость не тратится. На первый участок гнома доставит вертолет.

Если он не сможет спуститься или подняться на новый участок, или его запаса зелья или выносливости не хватит, то он откажется от выполнения работы. Меггакрут просит Вас написать программу, которая ответит – сможет ли он пройти по всей стене.

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

В первой строке содержатся четыре целых числа L (5 ≤ L ≤ 1000), H (1 ≤ H ≤ 100), S (5<S<3000) и N(5<N<230000) – максимальная длина лестницы, количество бутылок с зельем, выносливость и количество участков стены, соответственно.

Далее следуют N чисел ai (1 ≤ ai ≤ 3000), описывающих высоту i-го сегмента.

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

Выведите “OUTOFSTAMINA”, если у него закончатся силы, “POTIONOUT”, если не хватит зелья на спуск, “TOOSHORTSTAIR”, если не хватит длины лестницы для подъема на новый сегмент или “SUCCESS”, если сможет пройти всю стену.

По дате
По рейтингу
Аватар пользователя
Новичок
7лет

так в чем заключается трудность решения? Есть ноработки?

Все решение в следующих фразах
"Одна бутылка тратится на один спуск, если длина лестницы меньше"
if a(i) - a(i+1) > L then H:=H - 1;

"Выносливость тратится на единицу за каждый метр подъема"
if a(i) < a(i+1) then S := S - a(i+1) - a(i)

"Если он не сможет подняться на новый участок"
if a(i) - a(i+1) > L then writeln('TOOSHORTSTAIR');

Все три варианта ты можешь посчитать пробежавшись по всему массиву. Остается только проверить что из них сработает раньше.

Аватар пользователя
Ученик
7лет

Пусть мегакрут засумонит флай маунта.