Гость
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Задачка про остров / 25 сообщений из 421, страница 1 из 17
10.02.2020, 11:51
    #39924602
Имя пользователя1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
В море находится шестиугольный остров, сотворенный из вертикальных 6-угольных плит, плотно подогнанных друг к другу. Площадь горизонтального сечения каждой плиты равна 1, а высота верхней грани над уровнем моря - некоторое целое число больше 0, отдельно указывается для каждой плиты (на рисунке обозначено цифрами). Есть массив со всеми высотами.

Во время прилива остров полностью уходит под воду. Найти суммарный объем воды, который останется в лужах на острове, после отлива. На рисунке оный объем равен 3, вода останется в центральной ячейке и ячейке сверху-справа от неё.
...
Рейтинг: 0 / 0
10.02.2020, 12:20
    #39924622
SpringMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
Ограничения на сложность или что-то типа есть? Можно просто решение в лоб:

0) Обозначем "плиты море" = 0
1) Для каждой плиты находим все возможные пути к морю (с условием a[n] > a[n+1]). Для каждой плиты сохраняем массив плит, которые участвовали в путях к морю
2) Находим локальные минумы
3) Для каждого локального минимум рекурсивно обходим его соседей с проверкой, находятся ли они в "чьем-то пути" из первого пункта. Если нет, то добавляем его в лужу.
4) В итоге в лужах находятся группы плит. У каждой лужы находим минимального соседа
5) Объем = Сумма всех групп по (минимальный сосед - высота плиты)
...
Рейтинг: 0 / 0
10.02.2020, 12:24
    #39924625
Имя пользователя1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
SpringMan
Ограничения на сложность или что-то типа есть?
я сам пока не решил, не знаю.
ну а так - чем меньше, тем лучше)
...
Рейтинг: 0 / 0
10.02.2020, 12:32
    #39924630
SpringMan
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
Переусложним в первом решении, можно чуть проще:

0) Обозначем "плиты море" = 0
1) Для каждой плиты находим все возможные пути к морю (с условием a[n] > a[n+1]). Для каждой плиты сохраняем флаг "есть или нет выход к морю"
2) Находим локальные минумы
3) Для каждого локального минимум рекурсивно обходим его соседей с проверкой есть ли у него выход к морю. Если выхода к морю тоже нет, то добавляем эту плиту в лужу
4) В итоге в лужах находятся группы плит. У каждой лужы находим минимального соседа
5) Объем = Сумма всех групп по (минимальный сосед - высота плиты)
...
Рейтинг: 0 / 0
10.02.2020, 12:54
    #39924645
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
Нудно описывать исходные данные.

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

Код: sql
1.
2.
3.
4.
5.
    o o
    |/
  o-o-o
   /|
  o o
...
Рейтинг: 0 / 0
10.02.2020, 13:11
    #39924654
Gennadiy Usov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
Если для настоящей картинки (нужна матрица по трем линиям?):

рассуждения идут из центра
если по шести направлениям высоты выше, то "хорошо".
если по одному из направлений высота меньше, переходим на это направление.
и снова перебираем пять (или три) направлений.

как-то так
...
Рейтинг: 0 / 0
10.02.2020, 15:18
    #39924698
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
Просто прогаммировать структуры данных с графами - нудотство.
Обычно мы пытаемся применять сначала коллекции. Потом hashmaps, потом деревья.

Графы идут в самом конце по степени популярности использования.
...
Рейтинг: 0 / 0
10.02.2020, 15:27
    #39924702
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
mayton
Просто прогаммировать структуры данных с графами - нудотство.

+1
Предлагаю шестигранник сделать квадратным
...
Рейтинг: 0 / 0
10.02.2020, 15:55
    #39924717
Имя пользователя1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
Dima T
mayton
Просто прогаммировать структуры данных с графами - нудотство.

+1
Предлагаю шестигранник сделать квадратным
можно и так, только уточнить, что касание углами плотное и воду не пропускает
...
Рейтинг: 0 / 0
10.02.2020, 16:12
    #39924732
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
Имя пользователя1
можно и так, только уточнить, что касание углами плотное и воду не пропускает
Типа, в шестиграннике касание углов может быть и неплотным?
...
Рейтинг: 0 / 0
10.02.2020, 16:32
    #39924750
Имя пользователя1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
Basil A. Sidorov
Имя пользователя1
можно и так, только уточнить, что касание углами плотное и воду не пропускает
Типа, в шестиграннике касание углов может быть и неплотным?
в шестиугольнике касание сторонами, потому вопросов не возникает.
...
Рейтинг: 0 / 0
10.02.2020, 16:49
    #39924755
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
Имя пользователя1
в шестиугольнике касание сторонами
Внимательно посмотрите на собственную картинку.
...
Рейтинг: 0 / 0
10.02.2020, 17:26
    #39924770
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
Dima T
mayton
Просто прогаммировать структуры данных с графами - нудотство.

+1
Предлагаю шестигранник сделать квадратным

+1 В комьютерных играх типа Panzer General игровая поверхность так и задана. Более того
там хитрость есть как на квадрате больше ячеек впихнуть.
...
Рейтинг: 0 / 0
10.02.2020, 17:31
    #39924774
АСУ ТПшник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
Перебираем для каждого островка соседей. Если все 6 выше - тут лужа. Все. Всем спасибо все свободны.
...
Рейтинг: 0 / 0
10.02.2020, 17:33
    #39924776
АСУ ТПшник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
Хотя погорячился да.. Все не так..
...
Рейтинг: 0 / 0
10.02.2020, 17:35
    #39924783
Имя пользователя1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
Basil A. Sidorov,

касание любой пары шестиугольников никому не мешает.

а у квадратов, в реальном мире, не может так быть, чтобы А касался D, и в то же время B касался С (см. картинку). Потому отдельное пояснение про углы.
...
Рейтинг: 0 / 0
10.02.2020, 17:37
    #39924785
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
Это копи-паста с одной из олимпиадных задач. Только там дождь капал на квадратные столбы и надо
было посчитать высоту луж после дождя. Границы столбов по краям уходили в минус бесконечность
тоесть по краям вода стекала вниз.
...
Рейтинг: 0 / 0
10.02.2020, 17:40
    #39924790
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
АСУ ТПшник
Хотя погорячился да.. Все не так..

Это в любом случае рекурсия. Изюминка будет в условии выхода.
...
Рейтинг: 0 / 0
10.02.2020, 17:46
    #39924795
АСУ ТПшник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
Мне кажется надо пытаться представить все с точки зрения воды - где она упрется не в море , стекая. А когда эти самые области уже конечное число - вот тут применять сравнение высот и прочее и прочее.
...
Рейтинг: 0 / 0
10.02.2020, 17:52
    #39924801
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
1. Крайние hexxagons которые упираются в море - надо приравнять к некому минимальному числу типа MIN_INTEGER.
2. Далее должен быть некий цикл по всем оставшимся hexxagons, где мы просто делаем min(x,y) по уровню
воды между всеми соседями.
3. Завершаем алгорим когда уровни воды перестали понижаться.
...
Рейтинг: 0 / 0
10.02.2020, 18:30
    #39924843
АСУ ТПшник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
Или я не понял, или 51325 лужу с двумя минимумами вы пропустите.
...
Рейтинг: 0 / 0
10.02.2020, 18:31
    #39924844
АСУ ТПшник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
Так же крайние клетки могут быть разной высоты. Не все так просто.
...
Рейтинг: 0 / 0
10.02.2020, 18:38
    #39924849
АСУ ТПшник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
Что-то типа по капле упало на каждый хекс. И множится она деревом на все клетки, которые ниже текущей. Уплыла в море - вычеркиваем, нет - ищем минимумы.
Нашли все минимумы.
В каждом минимуме - поднимаем уровень на один. - соответсвенно на все граничные хексы пуляем очередную каплю. И так далее и тому подобное.
Куча граничных условий, а если еще и на язык переклывать, не кислая такая программа выйдет.

Изящного решения мне не видно пока.
...
Рейтинг: 0 / 0
10.02.2020, 18:40
    #39924852
АСУ ТПшник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
Хм.. может инвертировать поле - самая высокая клетка становится самой низкой, тогда все локальный максимумы - потенциальные точки для дна лужи. А вот как ее края посчитать, вот это задачка.
...
Рейтинг: 0 / 0
10.02.2020, 18:43
    #39924853
iOracleDev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Задачка про остров
Имя пользователя1,

Можно пойти от противного, закрашивая ячейки сливающиеся в океан цветом "Океан".
В лоб:
верхний ряд 1,4,3 - "Океан"
второй ряд 1, 5, , 5 - "Океан", 1 - нет выхода в океан "Лужа" (все окружающие выше или "Лужа")
третий ряд 2, 3, 6 - "Океан", 2 - нет выхода в океан "Лужа" (все окружающие выше или "Лужа"), 4 - неизвестно
четвертый ряд 2, 6, 2 - "Океан", 4 - неизвестно
пятый ряд 3, 1, 2 - "Океан"
обрабатываем оставшиеся, остались две 4-ки, обе получаются "Океан".

Можно идти по спирали сначала внутрь, потом наружу, по идее должны закрыть даже сложные случаи, но не уверен.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Задачка про остров / 25 сообщений из 421, страница 1 из 17
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]