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

ЕГЭ_27-23 Основная волна. Сумма набора

По мотивам задания 27 ЕГЭ-23 (Основная волна 19.06.23) /Источник - Задание № 9755.kompege.ru

Задача . КЕГЭ-27_2023_Основная волна_I

 


Постановк задачи.
По мотивам задания 27 ЕГЭ -23 Основная волна 19.06.23 )
По каналу связи передаётся последовательность целых чисел – показания прибора.
В течение N мин. (N – натуральное число) прибор ежеминутно регистрирует значение силы тока
(в условных единицах) в электрической сети и передаёт его на сервер.
Определите три таких переданных числа, чтобы между моментами передачи
любых двух из них прошло не менее K мин., а сумма этих чисел была минимально возможной.
Запишите в ответе найденную сумму.
Входные данные
В первой строке два натральных числа K и N
В следующей строке задан список целых чисел - показаний приборов
Выходные данные
Ответ на задание: минимальная сумма трех показаний, между любыми из которох прошло не менее K секунд

 
K,N,Items Ожидаемый результат Пояснение
2 6 
15 14 20 23 21 10
 
45 При таких исходных искомая величина
равна 45 – это сумма значений, зафиксированных
на первой, третьей и шестой минутах измерений.

 


Основные подходы к решению. 

  1. Перебор всех троек L, M, R таких, что \(M-L\geq K \ и\ R-M\geq K\)
    вычисление суммы \(x=A_L+A_M+A_R\), сравнение x с ответом
    (Ai - показание прибора на i-ой минуте)
    Сложность такого алгоритма O(N3)
  2. Нетрудно заметить, что если выполняется условие расстояния для пар L,M и M,R, то 
    автоматически выполняется условие для пары L,R.
    Oпределим FM, положив: \(F_M=min(A_0,\cdots,A_{M-K})+A_M+min(A_{M+K}\cdots+A_{N-1})\) 
    Тогда ответом на задание будет \(x = min(F_M | M=K,\cdots,N-1-K)\) 
    Для вычисления x можно воспользоваться следующим алгоритмом:
  •  построить список из  \(B_j=min(A_0,\cdots,A_j)+A_{j+k}\) ( фактически, \(min(B_0,\cdots B_{N-1-K}) \) 
    было бы решение для задачи с парой показаний)
  •  построить список из  \(D_i=min(B_0,\cdots,B_i)+A_{i+2\cdot K}\)
    Значение \(y = min(D_0,\cdots D_{N-1-2\cdot K}) \) и будет ответом на задачу
Сложность вычисления списка из Bj составляет O(N) (фактически создается стек с поддержкойй)
Построение списка из Di аналогично построению списка из Bj и тоже будет иметь линейную сложность.
Организация решения по слоссобу I никакой сложности не имеет, поэтому опишем решение задания по способу II,
причем в общем случае (будем считать, что набор состояний может состоять из t значений) 
 


Решение для файла B (и 106 записей)  требует менее одной секунды времени.
Приведенное решение не является самым эффективным для наборов из трех показаний,
поскольку требует нескольких "проходов по списку", но является достаточно простым 
в реализации и позволяет решать более общую задачу (для наборов из 4-х и более наборов)

 

Решение в один проход (индукционное). Алгоритм
Идея решения основывается на следующих положениях:
  • Пусть есть последвовательность длины N, для которой есть ответ,,
    то есть известен набор индексов L, M, R такой, что  \(M-L\geq K \ и\ R-M\geq K \)
    и сумма \(A_L+A_M+A_R\) минимальна.
  • В последовательность добавили новый элемент AN. Значение N может попасть в ответ
    с "лучшей" парой на отрезке [0;N-K], которая может теперь содержать значение N-K
    ( до этого максимально возможное значение для М было N-1-K).
    Значение N-K может войти в пару с "лучшим" значение на отрезке  [0;N-K-K], 
    которое теперь может быть равно N-2K (до этого только N-1-2K)
Рассмотрим алгоритм решения:
  • Инициализируем индексы L, M, R минимально возможными значениями
    L, M, R = 0, K, 2K  и положим x, y, z =AL, AM+AL, AR+AM+AL
  • в цикле while R < N-1 будем выполнять:
    • L, M, R = L+1, M+1, R+1
    • if x > AL : x = AL
    • if y > x+AM : y = x+A
    • if z > y+AR : z = y+AR
Последнее значение z и будет ответом
 


Сравнение результатов показывает, что "индукционный" метод  быстрее способа II ( на файле B премерно в 2,5 раза), 
имеет компактный код.
Главная сложность такого подхода к решению - понять, почему это решение работает :)
Данное решение можно "обобщить" для наборов любой длины
Используя файл B можно,  меняя параметр K при вызове процедуры, оценить быстродейстивие различных подходов
 


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