ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий
Тип задачи: Пары и тройки в числовых данных.
| КЭС: | 3.2 Оценка сложности вычислений. Время работы и объём используемой памяти, их зависимость от размера исходных данных. Оценка асимптотической сложности алгоритмов. Алгоритмы полиномиальной сложности. Переборные алгоритмы. Примеры различных алгоритмов решения одной задачи, которые имеют различную сложность 3.6 Язык программирования (Паскаль, Python, Java, C++, C#). Типы данных: целочисленные, вещественные, символьные, логические. Ветвления. Сложные условия. Циклы с условием. Циклы по переменной. Обработка данных, хранящихся в файлах. Текстовые и двоичные файлы. Файловые переменные (файловые указатели). Чтение из файла. Запись в файл. Разбиение задачи на подзадачи. Подпрограммы (процедуры и функции). Использование стандартной библиотеки языка программирования |
| Тип ответа: | Краткий ответ |
Ответ: 142 175430
Решение.
Используем исходный текстовый файл задания. В нём записаны сами элементы последовательности; отдельного числа с её длиной в начале файла нет. Сохраните файл рядом с программой под именем 1_17.txt.
Сначала находим среди всех элементов минимальное число M, кратное 19. Нельзя сразу проверять делимость членов пары на 19: требуется делимость на найденное число M.
В исходном файле N = 10000; минимум среди кратных 19 равен M = 114 = 19 · 6. Проверяем все N − 1 = 9999 соседних пар.
Для пары (x, y) условие отбора имеет вид (x mod M = 0) ИЛИ (y mod M = 0). Если оба числа делятся на M, пара всё равно учитывается один раз. Два независимых увеличения счётчика здесь дали бы ошибку.
Для каждой прошедшей пары вычисляем сумму s = x + y, увеличиваем счётчик и обновляем наибольшую сумму.
Проверим крайние по позиции подходящие пары и пару с максимальной суммой. Нумерация элементов начинается с 1.
| Номер | Первый элемент | Второй элемент | Сумма |
|---|---|---|---|
| 29 | 13688 | 42978 | 56666 |
| 256 | 88464 | 86966 | 175430 |
| 9969 | 39330 | 45643 | 84973 |
Для максимума 88464 = 114 · 776, поэтому пара (88464, 86966) подходит. Её сумма равна 175430. Других подходящих пар с большей суммой при полном просмотре нет.
Программа на Python:
with open('1_17.txt', encoding='utf-8-sig') as f:
a = [int(s) for s in f.read().split()]
limit = min(x for x in a if x % 19 == 0)
count = 0
best = None
for i in range(len(a) - 1):
x, y = a[i], a[i + 1]
if x % limit == 0 or y % limit == 0:
count += 1
if best is None or x + y > best:
best = x + y
print(count, best)Результат запуска на исходном файле: 142 175430.
Получено 142 подходящих пар.
Проверка полноты. Цикл посещает каждую допустимую начальную позицию ровно один раз, включая первую и последнюю. После каждой итерации счётчик равен числу подходящих уже просмотренных окон, а best хранит нужное крайнее значение среди них. Обновление выполняется только после проверки всех требований, поэтому итог учитывает в точности нужные окна.
Время работы линейно по числу элементов: один просмотр для порога и один для окон. Список a занимает O(N) памяти; дополнительные переменные требуют O(1).
Ответ: 142 175430.
Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINF42A7D2.
Сообщение увидит только команда сайта: на странице оно не публикуется.
Комментарии к решению
Комментарии видны всем посетителям сайта.
Комментариев пока нет. Будьте первым.
Чтобы оставить комментарий, войдите или зарегистрируйтесь.