Задание EGEINF655816: Пары и тройки в числовых данных

ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий

Открыть решение ↓ Ошибка или пожелание

Тип задачи: Пары и тройки в числовых данных.

Учебные темы: Массивы и последовательности чисел. Вычисление обобщённых характеристик элементов массива или числовой последовательности (суммы, произведения, среднего арифметического, минимального и максимального элементов, количества элементов, удовлетворяющих заданному условию). Линейный поиск заданного значения в массиве. Алгоритмы работы с элементами массива с однократным просмотром массива. Сортировка одномерного массива. Простые методы сортировки (метод пузырька, метод выбора, сортировка вставками). Сортировка слиянием. Быстрая сортировка массива (алгоритм QuickSort). Двоичный поиск в отсортированном массиве.

Впишите правильный ответ.

Рисунок из условия ФИПИ

Задание выполняется с использованием прилагаемых файлов.

 

В файле содержится последовательность целых чисел. Её элементы могут принимать целые значения от –100 000 до 100 000 включительно. Определите количество пар последовательности, в которых хотя бы одно число отрицательно, а сумма чисел пары меньше количества чисел в последовательности, кратных 32. В ответе запишите количество найденных пар, затем максимальную из сумм элементов таких пар. В данной задаче под парой подразумевается два идущих подряд элемента последовательности.

 

Скачать файл задания (TXT, ФИПИ)


i
СВОЙСТВА ЗАДАНИЯ
КЭС:
3.2 Оценка сложности вычислений. Время работы и объём используемой памяти, их зависимость от размера исходных данных. Оценка асимптотической сложности алгоритмов. Алгоритмы полиномиальной сложности. Переборные алгоритмы. Примеры различных алгоритмов решения одной задачи, которые имеют различную сложность
3.6 Язык программирования (Паскаль, Python, Java, C++, C#). Типы данных: целочисленные, вещественные, символьные, логические. Ветвления. Сложные условия. Циклы с условием. Циклы по переменной. Обработка данных, хранящихся в файлах. Текстовые и двоичные файлы. Файловые переменные (файловые указатели). Чтение из файла. Запись в файл. Разбиение задачи на подзадачи. Подпрограммы (процедуры и функции). Использование стандартной библиотеки языка программирования
3.10 Массивы и последовательности чисел. Вычисление обобщённых характеристик элементов массива или числовой последовательности (суммы, произведения, среднего арифметического, минимального и максимального элементов, количества элементов, удовлетворяющих заданному условию). Линейный поиск заданного значения в массиве. Алгоритмы работы с элементами массива с однократным просмотром массива. Сортировка одномерного массива. Простые методы сортировки (метод пузырька, метод выбора, сортировка вставками). Сортировка слиянием. Быстрая сортировка массива (алгоритм QuickSort). Двоичный поиск в отсортированном массиве
Тип ответа:Краткий ответ
Номер: 655816
НЕ РЕШЕНО Ответить

Решение задания EGEINF655816

Ответ: 4969 299

Решение.

В файле 10000 чисел, каждое записано в отдельной строке. Первое число — элемент последовательности, а не её длина. Рассматриваем только соседние пары, сохраняя исходный порядок. Всего начальных позиций 10000 − 1 = 9999; соседние окна могут пересекаться.

m — количество элементов всего файла, кратных 32. Получаем m = 310. Кратность проверяем равенством остатка нулю; подходят и отрицательные кратные, и ноль, если он встретится. Ноль при этом не является отрицательным.

Для пары одновременно нужны хотя бы одно отрицательное число и сумма s < m. Равенство s = m исключаем. Если отрицательны оба числа, пара тоже может подойти и считается один раз.

Для каждого подходящего окна увеличиваем счётчик на 1 и обновляем максимальную сумму. Перебор идёт по начальным позициям от 1 до 9999 включительно; ни одна допустимая соседняя пара не пропускается и не проверяется дважды.

Сохраним приложенный текстовый файл под именем data.txt рядом с программой. Программа на Python:

with open("data.txt", encoding="utf-8-sig") as f:
    a = [int(x) for x in f.read().split()]

m = sum(x % 32 == 0 for x in a)
count = 0
best = None
for i in range(len(a) - 1):
    w = a[i:i + 2]
    s = sum(w)
    if any(x < 0 for x in w) and s < m:
        count += 1
        if best is None or s > best:
            best = s

print(count, best)

Начальное best = None означает отсутствие найденного окна. Ноль не используется как искусственная начальная граница: реальные суммы могут иметь любой разрешённый условием знак. В данном файле подходящие окна существуют. Данные читаются за линейное время; основной цикл имеет постоянный размер окна, поэтому вся работа занимает O(n), память списка — O(n).

Проверка результата. Полный проход даёт 4969 подходящих окон. Максимальная сумма равна 299. Контрольные окна с позициями, отсчитываемыми от 1:

Начальная позицияЭлементыСумма
3-7258; -98086-105344
4-98086; -37417-135503
7389-47129; 47428299

Окно с начальной позицией 7389 достигает найденного экстремума. Отрицательных элементов 1; 299 < 310. Таблица иллюстрирует результат; полноту количества и экстремума обеспечивает проверка всех начальных позиций, а не только этих примеров.

Ответ: 4969 299.

Помочь улучшить сайт

Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINF655816.

Сообщение увидит только команда сайта: на странице оно не публикуется.

Комментарии к решению

Комментарии видны всем посетителям сайта.

Комментариев пока нет. Будьте первым.

Чтобы оставить комментарий, войдите или зарегистрируйтесь.