Задание EGEINF41E442: Сортировка, отбор и моделирование

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

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

Тип задачи: Сортировка, отбор и моделирование.

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

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

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

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

 

В магазине продаётся N товаров нескольких артикулов. Товары одного артикула имеют одинаковую цену. Учёт товаров ведётся поштучно, для каждой единицы товара известен её текущий статус (продана или нет). Товары разделены на две категории: дорогие
и дешёвые. Дорогими считаются товары, цена на которые превышает среднюю цену (среднее арифметическое) всех товаров
в базе данных магазина без учёта их текущего статуса. Остальные товары считаются дешёвыми.

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

Найдите суммарную выручку магазина от реализации товара – лидера продаж, а также оставшееся количество товара с этим артикулом.

 

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

В первой строке входного файла находится число N – количество товаров в базе данных магазина (натуральное число, не превышающее 10 000). В каждой из следующих N строк находится три числа, разделённых пробелом: артикул товара (натуральное число, не превышающее 100 000), его цена (натуральное число, не превышающее 10 000) и статус (0, если товар уже продан, и 1, если ещё не продан).

 

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

Два числа: сумма выручки от реализации товара – лидера продаж,
а также количество товара с этим артикулом, оставшееся в магазине.

 

Типовой пример организации данных во входном файле

8

10 100 1

3 10 0

10 100 0

2 10 1

10 100 0

3 10 1

11 100 0

1 200 0

При таких исходных данных дорогими являются товары стоимостью 100 и 200 рублей. Больше всего было продано товара
с артикулом 10. В продаже остался один такой товар. Условию задачи удовлетворяет ответ: 200 1.

 

Типовой пример имеет иллюстративный характер.
Для выполнения задания используйте данные из прилагаемого файла.

 

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


i
СВОЙСТВА ЗАДАНИЯ
КЭС:
3.10 Массивы и последовательности чисел. Вычисление обобщённых характеристик элементов массива или числовой последовательности (суммы, произведения, среднего арифметического, минимального и максимального элементов, количества элементов, удовлетворяющих заданному условию). Линейный поиск заданного значения в массиве. Алгоритмы работы с элементами массива с однократным просмотром массива. Сортировка одномерного массива. Простые методы сортировки (метод пузырька, метод выбора, сортировка вставками). Сортировка слиянием. Быстрая сортировка массива (алгоритм QuickSort). Двоичный поиск в отсортированном массиве
Тип ответа:Краткий ответ
Номер: 41E442
НЕ РЕШЕНО Ответить

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

Ответ: 43656 36

Решение.
В исходном файле 9992 строк товаров. Каждая строка соответствует одной единице, поэтому среднюю цену считаем по всем строкам, включая уже проданные товары. Среднее по различным артикулам было бы другой величиной.
Сумма цен всех единиц S = 5576611, количество N = 9992. Средняя цена равна SN = 55766119992. Товар дорогой тогда и только тогда, когда его цена p строго больше этого значения. Чтобы обойтись точными целыми числами, проверяем p · N > S.
Для каждого артикула накапливаем цену, число проданных единиц и остаток. Статус 0 увеличивает число проданных, статус 1 — остаток. Цена всех единиц одного артикула одинакова по условию.
Среди дорогих артикулов сначала выбираем максимальное число продаж. При равенстве сравниваем цены и выбираем большую. Только при равенстве обоих показателей сравниваем остатки и выбираем меньший. Эти три условия удобно объединить в ключ (продано, цена, −остаток), сравниваемый слева направо.
В файле 215 различных артикулов, из них 103 дорогих. Три первых кандидата после применения правил:

АртикулЦенаПроданоОсталось
464818565136
517868565137
37134831510

У всех трёх продано 51 единица. Артикул 37134 выбывает из-за цены 831, которая меньше 856. Его нулевой остаток не запрещает участие: такого ограничения в условии нет. У двух остальных цена одинакова, поэтому сравниваем остатки 36 и 37 и выбираем артикул 46481.
Сохраните скачанный файл рядом с программой под исходным именем. Программа на Python:

with open("img1_1777467535.txt") as f:
    n = int(f.readline())
    rows = [tuple(map(int, line.split())) for line in f]
total = sum(price for article, price, status in rows)
goods = {}
for article, price, status in rows:
    if article not in goods:
        goods[article] = [price, 0, 0]
    if status == 0:
        goods[article][1] += 1
    else:
        goods[article][2] += 1
candidates = [v for v in goods.values() if v[0] * n > total]
price, sold, left = max(candidates, key=lambda v: (v[1], v[0], -v[2]))
print(price * sold, left)

Выручка от выбранного артикула равна цене одной единицы, умноженной на число проданных: 856 · 51 = 43656. Остаток равен 36.
Проверка: в первичных строках артикула 46481 найдено 87 единиц, из них 51 со статусом 0 и 36 со статусом 1; 51 + 36 = 87. Цена 856 удовлетворяет точному условию 856 · 9992 > 5576611. Независимая группировка строк и последовательное применение трёх критериев дали тот же единственный артикул.
Каждая строка обрабатывается постоянное число раз. Время O(N), память для строк и словаря O(N).
Ответ: 43656 36.

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

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

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

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

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

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

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