Статья Автор: Лебедев Дмитрий

ЕГЭ_27_Телескопы вдоль шоссе_Поиск и разбор решения. Часть 3

Телескопы вдоль шоссе (ЕГЭ 27-2022). Поиск и разбор решения. Часть 3.
По мотивам задачи: Пробник ИМЦ СПб 
Часть 1. Тетрадь 51148
Часть 2. Тетрадь 52148


В некоторой стране построен радиотелескоп. Антенны телескопа расположены вдоль шоссе. 
Номер антенны соответствует километровой отметке от начала шоссе. Каждая антенна в сутки принимает
определённое количество сигналов, формирует их в пакеты и отправляет пакеты в Центр обработки.
Центр обработки разместили рядом с одной из антенн так, чтобы количество энергии,
расходуемой на передачу данных от всех антенн, было минимальным.

Количество энергии, необходимое для передачи всех пакетов с данными, равно
произведению расстояния от антенны до центре обработки на количество передаваемых пакетов с данными.
Определите номер антенны, рядом с которой следует разместить центр обработки данных.
Если таких номеров несколько, укажите наименьший из них.

Пример входного файла: Ответ Пояснение

6
1 100
3 250
8 7
10 4
15 1
31 160

3 4755 Для случая, когда центр обработки данных размещён около 3-й антенны,
суммарную энергию, необходимую для передачи данных,
можно оценить как
2·100 + 5·7 + 7·4 + 12·1 + 28·160 = 4755

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

  • в первой строке число: количество антенн N .
  • Каждая из следующих N строк содержит два натуральных числа – номер антенны
    и количество пакетов, отправленных антенной в Центром обработки.
    Антенны нумеруются в порядке их расположения вдоль шоссе, начиная с нулевой отметки.

В ответе укажите два числа (в одной строке через пробел) : сначала искомый номер антенны, затем суммарную энергию.


Алгоритмы решений.

В части 1 был рассмотрен алгоритм перебора со сложность O(N2), а в части 2 использовался тернарный поиск,
сложность которого можно оценить как O(NlogN). Этого достаточно для решения задания на ЕГЭ, но может быть
недостаточно для  "олимпиадной формулировки" задания.
Попробуем найти решение со сложностью O(N).
Для поиска решения переформулируем задачу, найдем решение и оформим его в виде программы

Алгоритм с использованием префексных сумм.
Попробуем сформулировать задачу в более простом общем виде. 
Будем считать, что антенны расположены на каждом км и передают неотрицательное число пакетов.
Пусть W=[w1, w2,...,wn],  wi  - количество пакетов, которое передается с i-го км.
Рассмотрим расположение "Центра обработки" (ЦО) в точке с номером j (то есть на j-м км)
и определим SLj, SRj (веса слева и справа), положив:
  • \(SL_j=w_1\cdot|j-1|+\cdots+w_{j-1}\cdot|j-(j-1)|\) - сумма энергии (моментов масс) элементов "слева" от перекладины;
  • \(SR_j=w_{j+1}\cdot|(j+1)-j|+\cdots+w_{j-1}\cdot|n-j|\) - сумма энергии (моментов масс) элементов "справа" от перекладины;
Также определим S, Sj- и Sj+, положив:
  • \(S=w_1+\cdots+w_{n} \) - сумма всех элементов 
  • \(S_{j-}=w_1+\cdots+w_{j-1} \) - префиксная сумма элементов "до j"
  • \(S_{j+}=w_{j}+w_{j+1}+\cdots+w_{n} \) - префиксная сумма элементов "от j" 
Нетрудно заметить, что:
  • \(S_{j+}=S-S_{j-}\)
  • \(SL_{i}=SL_{i-1}+S_{i-}\)
  • \(SR_{i}=SR_{i-1}-S_{i+}=SR_{i-1}-S+S_{i-} \)
Нам необходимо миминизировать значение SLi+SRi, для которого получаем, что: 
Таким образом, получаем, что:
\(F[i]=SL_{i}+SR_{i}=SL_{i-1}+SRL_{i-1}+2\cdot S_{i-}-S=F[i-1]+d_i , \ где\ d_i=2\cdot S_{i-}-S \)
Мы уже знаем, что F[i] - выпуклая фунция, поэтому надо найти такое i, что:
  • \(d_{i-1} < 0\ и\ d_i\geq0 \)
Это можно сделать за  O(n) с помощью следующего алгоритма:
  • Считать данные и "построить" массив префексных сумм PS, где PS[-1] - cумма всех элементов 
  • Найти j, такое что :      \(2\cdot PS[j-1]<PS[-1],\ а\ 2\cdot PS[j]\geq PS[-1]\) 
    (поиск j можно вести "в линию", а можно бинарным поиском (PS - неубывающий массив)


Для полноты картины приведем решение с использованием модуля метода bisect.bisect_left модуля bisect
 


Сложность алгоритма в этом случае будет O(N)
Используя этот способ попробуйте решить задачу типа К с большими объемами данных.
Задача 52151
 

Подведем итоги. Эта задача имеет простые решения, поскольку результатом является выпуклая функция.
  • Для решения на экзамене необходимо считать данные из файла и записать в список ( примерно 5 строк) 
  • Для любого решения необходима программа, вычисляющая суммарную энергию
    для конкретного положения Центра обработки  (это программа на 5 строк - здесь она f_one(W,j))
  • На базе этой программы можно построить переборное решение (это еще 5 строк).
    Сложность O(N2). трудоемкость 5-7 минут
  • Для большого объёма данных из "переборного" решения можно организовать тернарный поиск
    (переписать 5-10 операторов) - этого будет достаточно.
    Сложность O(NlogN). дополнительная трудоемкость 5-7 минут
  • Наиболее оптимальным способом будет использование префексных сумм.
    Сложность O(N). трудоемкость 5-7 минут 

Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать