ФИПИ · ЕГЭ · все форматы ответа · 2475 заданий
Тип задачи: Электронные таблицы и формулы.
| КЭС: | 4.2 Анализ данных с помощью электронных таблиц. Вычисление суммы, среднего арифметического, наибольшего (наименьшего) значения диапазона. Вычисление коэффициента корреляции двух рядов данных. Построение столбчатых, линейчатых и круговых диаграмм. Построение графиков функций. Подбор линии тренда, решение задач прогнозирования. Решение задач оптимизации с помощью электронных таблиц |
| Тип ответа: | Краткий ответ |
Ответ: 2354
Решение.
В исходной таблице 3200 строк данных, в каждой 4 натуральных чисел. Первая строка данных имеет номер 1, заголовка нет. Порядок строк сохраняем: сортировка всей таблицы изменила бы их номера.
Для строки обозначим числа в исходном порядке через a, b, c, d. Первое условие равносильно 2 · max(a, b, c, d) < a + b + c + d: переносим наибольшее число из правой части в левую. Неравенство строгое; равенство не подходит.
Чтобы разбить четыре позиции на две пары, достаточно выбрать напарника для первой позиции. Есть ровно три разбиения: (a, b) и (c, d); (a, c) и (b, d); (a, d) и (b, c). Других разбиений нет, потому что после выбора первой пары вторая определяется однозначно.
По условию ни в одном разбиении суммы не должны совпадать. Поэтому проверяем одновременно a + b ≠ c + d, a + c ≠ b + d и a + d ≠ b + c. Одной неудачной попытки разбиения недостаточно: надо исключить все три.
Счётчик увеличиваем на единицу только при выполнении первого условия и всех трёх неравенств. Каждая строка рассматривается один раз, значит счётчик в конце равен искомому количеству.
Для программы скопируйте только исходный диапазон A1:D3200 в текстовый файл 9.txt в кодировке UTF-8: одна строка таблицы — одна строка текста, числа разделены пробелами, табуляцией или точкой с запятой. Не добавляйте заголовок и не меняйте порядок строк. Исходный ODS можно сохранить отдельно.
Программа на Python:
answer = 0
with open("9.txt", encoding="utf-8-sig") as f:
for number, line in enumerate(f, 1):
row = list(map(int, line.replace(';', ' ').split()))
assert len(row) == 4
a, b, c, d = row
enough = 2 * max(row) < sum(row)
no_pairs = (a + b != c + d and
a + c != b + d and
a + d != b + c)
if enough and no_pairs:
answer += 1
print(answer)Первое условие выполняется в 2428 строках. После исключения всех строк с разбиением на равные суммы остаётся 2354.
Проверка на первой строке: числа 59, 65, 92, 38. Наибольшее 92 меньше 59 + 65 + 38 = 162. Три пары сумм: 124 и 130; 151 и 103; 97 и 157. Все суммы попарно не равны, поэтому строка засчитывается.
Независимая проверка упорядочивала числа внутри каждой строки и проверяла невозможность равенства суммы крайних чисел сумме средних. Все выбранные номера совпали. Эквивалентность двух способов дополнительно проверена на всех 2401 упорядоченных четвёрках с числами от 1 до 7.
На одну строку приходится постоянное число действий: в ней всегда четыре или пять чисел. Время O(N), дополнительная память O(1), поскольку весь файл одновременно в память не загружается.
Ответ: 2354.
Напишите пожелание к сайту или решению либо сообщите о найденной неточности в задании EGEINFD90643.
Сообщение увидит только команда сайта: на странице оно не публикуется.
Комментарии к решению
Комментарии видны всем посетителям сайта.
Комментариев пока нет. Будьте первым.
Чтобы оставить комментарий, войдите или зарегистрируйтесь.