Задача 2 «Космическое поселение»

реклама
Задача 2
«Космическое поселение»
Возможны два варианта размещения модулей
1
Основная идея решения задачи ≪Космическое поселение≫:
двоичный поиск.
Если модули ориентированы так, что сторона модуля
длиной a ориентирована вдоль стороны поля длиной w,
то число модулей с защитой, которые можно разместить
на поле, равно
(w div (a + 2d)) × (h div (b + 2d)) ≥ n
число мест для модулей
с защитой вдоль стороны
поля длиной w
число мест для модулей
с защитой вдоль стороны
поля длиной h
2
Тип всех переменных int64
L:=0;
R:= Min(w, h)+1;
while L+1< R Do
begin
M:=(L+R) div 2;
ad:=a+2*M;
bd:=b+2*M;
ac:=w div ad;
bc:=h div bd;
if (ac*bc >= n) then L:=M
else R:=M;
end;
На выходе L определяет толщину защитного слоя
при рассматриваемой ориентации модулей
3
Для решения подзадачи 1 достаточно перебрать все
возможные значения толщины защиты линейным проходом.
Для решения подзадачи 2 требуется заметить, что при
размещении модулей вдоль каждой стороны поля
размещается не более n модулей, поэтому можно
осуществить перебор, сколько модулей будет расположено
вдоль стороны длиной w и проверить для такого
количества модулей вдоль этой стороны, какая толщина
защиты возможна.
Для решения подзадачи 3 можно развить эту мысль,
заметив, что вдоль одной из сторон размещается не более
sqrt(n) модулей, а значит можно ускорить перебор.
4
Спасибо за внимание
5
Скачать