Олимпиадный тренинг

Задача . Космический капитализм


Задача

Темы:
В свободное от работы время Николай Владимирович, ответственный за систему проведения олимпиад, разрабатывает новый космический симулятор, и на данный момент у него готова система инвентаря корабля с оборудованием, гиперпрыжки между двумя звёздными системами и торговля на планетах. Рассмотрим подробнее устройство симулятора.
Игровой мир состоит из звёздных систем, в каждой из которых есть несколько планет. Для перемещения корабля между звёздными системами необходим двигатель и топливный бак. На один гиперпрыжок корабль тратит количество топлива, равное расстоянию между звёздными системами в парсеках. Из этого следует, что корабль не может выполнить прыжок на расстояние больше, чем вместимость его топливного бака.
Владелец корабля имеет определённое количество галактических кредитов на счёте. На каждой планете представлены товары пяти видов: продовольствие, медикаменты, техника, роскошь и минералы. Для каждой планеты и каждого вида товара известно количество имеющегося товара в тоннах, стоимость покупки и продажи в галактических кредитах. Корпус корабля имеет заданную грузоподъёмность, и нельзя купить товаров больше, чем имеющаяся грузоподъёмность.
Сейчас Николай Владимирович пишет тест для проверки этой функциональности. Тестовый сценарий состоит из нескольких шагов:
1. Приобрести товар одного вида на текущей планете в некотором количестве;
2. Взлететь с планеты и выполнить гиперпрыжок в другую систему;
3. Приземлиться на выбранной планете и продать весь купленный на шаге 1 товар.
Для этого сценария есть отдельный файл сохранения, для которого известно количество товара на каждой планете, стоимость его покупки и продажи. Эти данные представлены в виде отдельной базы данных, которая доступна ниже.
Таблица stars хранит информацию о звёздных системах:
• id — уникальный идентификатор системы в рамках игрового мира;
• name — название системы.
Таблица planets хранит информацию о планетах:
• id — уникальный идентификатор планеты в рамках игрового мира;
• name — название планеты;
• star_id — идентификатор звёздной системы, к которой относится планета.
Таблица star_map хранит информацию о расстояниях между звёздными системами:
• star_from_id — идентификатор начальной звёздной системы;
• star_to_id — идентификатор звёздной системы назначения (обязательно отличается от star_from_id);
• distance — расстояние между этими звёздными системами в парсеках.
Таблица product_types хранит информацию о типах товаров:
• id — уникальный идентификатор типа товаров;
• name — название типа товаров.
Таблица prices хранит информацию о стоимости покупки и продажи каждого типа товаров на каждой из планет:
• planet_id — идентификатор планеты;
• product_type — идентификатор типа товаров;
• buy_price — стоимость покупки владельцем корабля одной тонны товара в галактических кредитах;
• sell_price — стоимость продажи владельцем корабля одной тонны товара в галактических кредитах;
• amount — количество товара в тоннах, доступное к покупке на данной планете.
В рамках данного сценария кредитов хватит для покупки любого количества любого товара на любой планете. Пока что в этом сценарии не определено, какой товар и в каком количестве нужно приобрести и на какой планете его продать. Николай Владимирович хочет подобрать эти параметры так, чтобы максимизировать полученную прибыль (разницу между стоимостью продажи и покупки). Известно, что в сохранении корабль находится на планете Раалито системы Хезе, грузоподъёмность корабля равна 80 тонн, а вместимости топливного бака хватит на прыжок расстоянием в 25 парсек. Как опытный программист, Николай Владимирович определил нужные параметры за несколько минут и дописал тест. Определите это вместе с ним и вы. В качестве ответа введите одно целое число — прибыль в галактических кредитах, полученную после выполнения тестового сценария с найденными параметрами. Если окажется, что для тестового сценария нет ни одного набора параметров, который бы дал положительную прибыль, в качестве ответа введите 0.

Для работы с базой данных используйте: SQLite Studio

time 3000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
Комментарий учителя