В ювелирных магазинах продаются изделия четырёх категорий: A, B, С и D. В городе N был проведён мониторинг цен ювелирных изделий в различных магазинах. Напишите эффективную по времени работы и по используемой памяти программу, которая будет определять для каждой категории ювелирных изделий, сколько магазинов продают его дороже всего.
Описание входных и выходных данных.
На вход программе в первой строке подаётся число данных N о стоимости ювелирных изделий. В каждой из последующих N строк находится информация в следующем формате: <�Компания> <�Магазин> <�Категория> <�Цена>, где <�Компания> — строка, состоящая не более чем из 20 символов без пробелов, <�Магазин>—строка, состоящая не более чем из 20 символов без пробелов, <�Категория>—одна из букв—A, B, C или D, <�Цена>—целое число в диапазоне от 2000 до 700 000, обозначающее стоимость одного изделия в рублях.
<�Компания> и <�Магазин>, <�Магазин> и <�Категория>, а также <�Категория> и <�Цена> разделены ровно одним пробелом.
Пример входных данных:
5
Кристалл Адамас С 30000
Кристалл Блеск С 30000
Красота Элегант A 5000
Красота Бриллиант А 5000
Шик Классика А 4000
Кристалл Адамас В 10000
Программа должна выводить через пробел 4 числа— количество магазинов, продающих дороже всего изделия категории A, B, C и D соответственно. Если ювелирное изделие какой-либо категории нигде не продаётся, то следует вывести 0.
Пример выходных данных:
2 1 2 0.
Напишите эффективную как по времени, так и по памяти программу для решения поставленной задачи, если известно, что вводятся сведения о N изделиях.
Программа считается эффективной по времени, если время работы программы пропорционально N, то есть при увеличении N в k раз время работы программы должно увеличиваться не более чем в k раз.
Программа считается эффективной по памяти, если размер памяти, необходимой программе для хранения всех переменных, не увеличивается с ростом числа N.
Максимальная оценка за правильную (не содержащую синтаксических ошибок и дающуюправильный ответ при любых допустимых входных данных) программу, эффективную по времени и по памяти,—4 балла.
Максимальная оценка за правильную программу, эффективную только по времени,—3 балла.
Максимальная оценка за правильную программу, не удовлетворяющую требованиям эффективности,—2 балла.
Вы можете написать одну программу или две программы решения задачи (например, одна из программ может быть менее эффективна). Если вы напишете две программы, то каждая из них будет оцениваться независимо от другой, итоговой станет бо´ льшая из двух оценок. Перед текстом программы обязательно кратко опишите алгоритм решения. Укажите использованный язык программирования и его версию.
Программа читает все входные данные один раз, сразу подсчитывая в массиве с индексами от A до D количество камней, принадлежащих определённой ценовой категории. Во время чтения данных определяются максимальная цена ювелирных изделий для каждой категории и количество магазинов, продающих изделия по этой цене. Для этого используются 8 переменных или соответствующие массивы.
Баллы начисляются только за программу, которая решает задачу хотя бы для одного частного случая (например, когда для каждой категории ювелирных изделий максимальная цена отмечена ровно в одном магазине).
Пример правильной и эффективной программы на языке PascalABC 1.8. Программа эффективна по времени и по памяти.
var max, kcenkat: array[’A’..’D’] of integer;
c, i, k: char; j, N, b: integer;
begin
for i:=’A’ to ’D’ do
begin
max[i]:=2000;
kcenkat [i]:=0;
end;
readln(N);
for j:=1 to N do
begin
repeat
read(c);
until c=’ ’; {считана компания}
repeat
read(c);
until c=’ ’; {считана категория}
readln(k,b);
if max[k] begin
max[k]:=b;
kcenkat[k]:=1
end
else
if max[k] = b then
kcenkat[k]:= kcenkat[k]+1;
end;
{если ювелирных изделий какой-то категории не было, kcenkat[k] осталось равным 0 }
for i:=’A’ to ’D’
write(kcenkat[i],’ ’)
end.