В цветочных лавках продают три вида роз (белые, красные и желтые). В городе N была проведена оценка цены роз. Напишите эффективную по времени работы и по используемой памяти программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет определять для каждого вида роз, сколько лавок продают их дешевле всего.
На вход программе в первой строке подается число данных N о стоимости роз. В каждой из последующих N строк находится информация в следующем формате:
<Компания><Улица><Вид><Цена>
где <Компания> — строка, состоящая не более, чем из 20 символов без пробелов, <Улица> — строка, состоящая не более, чем из 20 символов без пробелов, <Вид> — символ Б, К или Ж, <Цена> — целое число в диапазоне от 100 до 500, обозначающее стоимость одной розы.
<Компания> и <Улица>, <Улица> и <Вид>, а также <Вид> и <Цена> разделены ровно одним пробелом.
Пример входной строки:
ТоргЦвет Садовая Ж 225
Программа должна выводить через пробел 3 числа – количество лавок, продающих дешевле всего белые, красные и желтые розы соответственно. Если роза какого-то вида нигде не продается, то следует вывести 0.
Пример выходных данных:
7 5 0
Будем по очереди обрабатывать строчки. Для этого будем посимвольно «пропускать» названия компаний и улиц, так как они не нужны. После чего считывать вид и цену. Для каждого вида у нас будет ячейка в массиве min и ячейка в массиве cnt, которые показывают, какой на данный момент минимум и сколько их соответственно. Если новая цена меньше предыдущей, то запомним её и поставим cnt равным единице. Если новая цена равна минимальной, то просто увеличим cnt на единицу. Изначально все min проинициализируем 1000, большим значением, которого точно не будет.
Приведём код на языке Pascal:
var n, i, ind, cost : integer;
buf : char;
min, cnt : array[1..3] of integer;
begin
for i := 1 to 3 do
begin
min[i] := 1000;
cnt[i] := 0;
end;
readLn(n);
for i := 1 to n do
begin
while buf <> ' ' do
read(buf);
read(buf);
while buf <> ' ' do
read(buf);
read(buf);
if buf = 'Б' then
ind := 1;
if buf = 'К' then
ind := 2;
if buf = 'Ж' then
ind := 3;
readLn(cost);
if cost = min[ind] then
inc(cnt[ind]);
if cost < min[ind] then
begin
min[ind] := cost;
cnt[ind] := 1;
end;
end;
writeLn(cnt[1], ' ', cnt[2], ' ', cnt[3]);
end.

