Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2013, 12:34   #1
clSintel
Новичок
Джуниор
 
Регистрация: 24.05.2012
Сообщений: 2
Восклицание

Вероятно, многие из вас слышали о пошаговой стратегии Losers-V от компании Lavin Interactive. Если вы неравнодушны к этой игре, вы просто обязаны помочь рыцарю, который попал в трудное положение…
Итак, во время сражения рыцарь заметил на горизонте рогатого демона. Несомненно, необходимо нанести удар. Казалось бы, чего проще, скачи и руби! Но рыцарь — особый персонаж: сила его удара зависит от разбега, а длина разбега небезгранична. Помогите же ему решить эту хитрую тактическую задачу.
Поле битвы представляет собой прямоугольник N × M клеток. В начале хода рыцарь стоит на клетке с координатами (x1, y1), а рогатый демон — на клетке (x2, y2). За один шаг рыцарь может перейти из клетки, где он находится, в одну из смежных по стороне клеток. Всего рыцарь может сделать не более L шагов. Во время разбега не разрешается покидать пределов поля битвы (это будет дезертирством) и заходить на клетку с рогатым демоном. После разбега рыцарь может ударить по демону, если находится в одной из смежных с ним по стороне клеток (удар не считается шагом). Сила удара равняется K + 1, где K — длина прямого участка, который проскакал рыцарь непосредственно перед ударом. Бить разрешается только один раз. Рыцарь очень просит вас сказать, какой максимальный урон он может нанести рогатому демону. Будем считать, что урон равен силе удара.
Исходные данные
Первая строка содержит 3 целых числа: N, M, L (1 ≤ N, M ≤ 100; 1 ≤ L ≤ 1000). Во второй строке записаны координаты рыцаря (x1, y1). В третьей — координаты рогатого демона (x2, y2). (1 ≤ x1, x2 ≤ N; 1 ≤ y1, y2 ≤ M). Координаты рыцаря и координаты рогатого демона различны.
Результат
Выведите единственное число — максимальный урон, который может причинить рыцарь демону.

Пример
исходные данные
3 4 4
1 1
3 4
результат
4

Подсказка
Рыцарь сдвигается в точку (2, 1), затем в (2, 4) и бьёт. Длина разбега равна 3, соответственно сила удара — 4.

Пытался одними только условиями, но в итоге вышло их многовато и я запутался...

Последний раз редактировалось Stilet; 19.11.2013 в 13:02.
clSintel вне форума Ответить с цитированием
Старый 19.11.2013, 13:01   #2
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Посмотреть, сколько от рыцаря до горизонтали/вертикали, на которой находится демон.
Оценить, на сколько удастся отойти от демона после достижения горизонтали/вертикали (с учетом оставшихся ходов и размера поля).
Выбрать наиболее удаленную от демона позицию, нанести удар.

Т.е., допустим, рыцарь на позиции 1,6; демон на позиции 4,2. Число ходов = 5, размер поля 5 на 9.
Допустим, рыцарь поднимается до горизонтали с демоном, на это уходит 6 - 2 = 4 хода. Остался 1 ход, но отойти от демона он не может (координата <= 0 - вышел за поле), => урон = 4.
Теперь допустим, что рыцарь продвигается до вертикали демона, на это уходит 4 - 1 = 3 хода. Осталось 2 хода. Если отойти - координаты будут 4,8, => урон = 7. При отдалении выхода за границы массива нет.
Отсюда вывод: макс. урон = 7.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 19.11.2013, 14:10   #3
SaLoKiN
Форумчанин
 
Аватар для SaLoKiN
 
Регистрация: 19.09.2013
Сообщений: 597
По умолчанию

многабукаф не осилил...
получается что за L ходов, можно сдать назад на прямую и снести демону башню? с ОП К+1 ударом?
Сделал сам, помоги другому!
Что-то работает не так? Дебаггер в помощь!!!
SaLoKiN вне форума Ответить с цитированием
Старый 19.11.2013, 14:51   #4
Vanta11a
Lawful Evil
Участник клуба
 
Аватар для Vanta11a
 
Регистрация: 13.05.2008
Сообщений: 1,208
По умолчанию

Ну да, суть в том, чтобы:
а) дойти до прямой, ведущей к демону
б) сдать на все оставшиеся ходы в обратную сторону от демона
в) посчитать расстояние до демона
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c)
Vanta11a вне форума Ответить с цитированием
Старый 20.11.2013, 06:55   #5
clSintel
Новичок
Джуниор
 
Регистрация: 24.05.2012
Сообщений: 2
По умолчанию

Цитата:
Сообщение от Vanta11a Посмотреть сообщение
Посмотреть, сколько от рыцаря до горизонтали/вертикали, на которой находится демон.
Оценить, на сколько удастся отойти от демона после достижения горизонтали/вертикали (с учетом оставшихся ходов и размера поля).
Выбрать наиболее удаленную от демона позицию, нанести удар.

Т.е., допустим, рыцарь на позиции 1,6; демон на позиции 4,2. Число ходов = 5, размер поля 5 на 9.
Допустим, рыцарь поднимается до горизонтали с демоном, на это уходит 6 - 2 = 4 хода. Остался 1 ход, но отойти от демона он не может (координата <= 0 - вышел за поле), => урон = 4.
Теперь допустим, что рыцарь продвигается до вертикали демона, на это уходит 4 - 1 = 3 хода. Осталось 2 хода. Если отойти - координаты будут 4,8, => урон = 7. При отдалении выхода за границы массива нет.
Отсюда вывод: макс. урон = 7.
Через что это лучше всего реализовать? Я пытался просто через if,else так сказать обработку ситуаций, т.е. если поле такое то, если нет, то если поле такое, то, если рыцарь стоит по отношению к демону так, то, иначе, если рыцарь стоит так, то поставить сюда и посчитать урон K+1. И так понимаю, что я выбрал не лучший способ...
clSintel вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача по программированию КсенияСергеева Помощь студентам 7 10.06.2013 01:53
задача по программированию VeNdJaKe Помощь студентам 0 24.04.2012 10:45
Задача по программированию arturjoshi Паскаль, Turbo Pascal, PascalABC.NET 0 26.01.2012 20:59
Задача по программированию. ALex25153 Помощь студентам 0 24.11.2011 21:33