Задание 26. Информатика. ЕГЭ 2024. Резерв. 19.06.2024

Просмотры: 292
Изменено: 24 ноября 2024

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

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

Найдите суммарную стоимость оставшихся единиц товара-лидера продаж, а также артикул этого товара.

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

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

Типовой пример организации данных в файле:
\(8\)
\(10 \,\, 100 \,\, 1\)
\(3 \,\, 10 \,\, 0\)
\(10 \,\, 100 \,\, 0\)
\(2 \,\, 20 \,\, 1\)
\(10 \,\, 100 \,\, 0\)
\(3 \,\, 10 \,\, 1\)
\(11 \,\, 100 \,\, 0\)
\(1 \,\, 200 \,\, \)
При таких исходных данных дорогими являются товары стоимостью \(100\) и \(200\) рублей. Больше всего продано товара с артикулом \(10\). В продаже остался один такой товар.
Условию задачи удовлетворяет ответ: \(100 \,\, 10\)

Файл с данными

Решение:

Python


f = open('26.txt')

N = int(f.readline())

goods = {}
p = 0

for s in f:
    art, price, sell = [int(x) for x in s.split()]
    p += price
    goods[art] = goods.get(art, [price, 0, 0])
    if sell == 0:
        goods[art][1] += 1
    else:
        goods[art][2] += 1

avg_price = p / N

exp_goods = {}

for k,v in goods.items():
    if v[0] > avg_price:
        exp_goods[k] = v


tmp = sorted(exp_goods.items(), key=lambda x: x[1][1], reverse=True)
sold = tmp[0][1][1]

most_sold = {}
max_price = 0

for i in tmp:
    if i[1][1] == sold:
        most_sold[i[0]] = i[1]
        max_price = max(i[1][0], max_price)

most_sold_max_price = {}
for k, v in most_sold.items():
    if v[0] == max_price:
        most_sold_max_price[k] = v

msmp = sorted(most_sold_max_price.items(), key=lambda x: x[1][2])

print(msmp[0][1][0] * msmp[0][1][2], msmp[0][0])

Ответ: \(36892 \,\, 45510\)