Присоединиться

11 класс·высокий уровень

Эффективную, в том числе и по используемой памяти, программу (укажите

Условие

На автозаправочных станциях (АЗС) продается бензин с маркировкой 92, 95 и 98. В городе N был проведен мониторинг цены бензина на различных АЗС.Напишите эффективную, в том числе и по используемой памяти, программу (укажите используемую версию языка программирования, например, Borland Pascal 7.0), которая будет определять для бензина с маркировкой 92, на какой АЗС его продают по второй по минимальности цене (считается, что самой низкой цене потребители не доверяют), а если таких АЗС несколько, то выдается только количество таких АЗС. Если все АЗС, у которых 92-й бензин есть, продают его по одной и той же цене, то эта цена считается искомой и выдается либо число таких АЗС, когда их несколько, либо конкретная АЗС, если она одна. Гарантируется, что хотя бы одна АЗС 92-й бензин продает.На вход программе сначала подается число данных о стоимости бензина N. В каждой из сле¬дующих N строк находится информация в следующем формате: <Компания> <Улица> <Марка> <Цена> где <Компания> — строка, состоящая не более чем из 20 символов без пробелов, <Улица> — строка, состоящая не более чем из 20 символов без пробелов, <Марка> — одно из чисел — 92, 95 или 98, <Цена> — целое число в диапазоне от 1000 до 3000, обозначающее стоимость одного литра бензина в копейках. <Компания> и <Улица>, <Улица> и <Марка>, а также <Марка> и <цена> разделены ровно одним пробелом. Пример входной строки:СуперБенз Цветочная 92 1950Программа должна выводить через пробел Компанию и Улицу искомой АЗС или их количество, если искомых вариантов несколько. Пример выходных данных:Бензинчик ПерспективнаяВторой вариант выходных данных:4 Критерии оценивания выполнения задания | Баллы | Программа работает для любых входных данных произвольного размера и находит ответ, не сохраняя входные данные в массиве, размер которого соответствует числу N (количеству запросов). Программа просматривает входные данные один раз, сохраняя данные о цене на бензин, поданных для каждой из встретившихся в списке АЗС. Допускается наличие в тексте программы одной синтаксической ошибки: пропущен или неверно указан знак пунктуации, неверно написано или пропущено зарезервированное слово языка программирования, не описана или неверно описана переменная, применяется операция, недопустимая для соответствующего типа данных (если одна и та же ошибка встречается несколько раз, то это считается за одну ошибку). | 4 | Программа работает верно, но входные данные запоминаются в массиве, размер которого соответствует числу N. Этот массив, возможно, потом сортируется. Допускается наличие от одной до трех синтаксических ошибок. Возможно, в принципиально верно организованном вводе данных есть одна ошибка (например, использование read вместо readln в Паскале или неверное считывание строки в C++). Три балла также выставляется, если в эффективной программе, удовлетворяющей критериям выставления 4 баллов, есть одна ошибка, в результате которой программа работает неверно на некоторых наборах нетипичных входных данных. | 3 | Программа работает в целом верно, эффективно или нет, но в реализации алгоритма содержится до двух ошибок (неверная инициализация счётчиков, допущена ошибка в принципиально верно организованной сортировке или алгоритме поиска минимальных элементов, используется знак “<” вместо “<=”, “or” вместо “and” и тому подобное). Возможно, некорректно организовано считывание входных данных. Допускается наличие от одной до пяти синтаксических ошибок, описанных выше | 2 | Программа, возможно, неверно работает при некоторых входных данных, но по приведённому тексту решения ясно, что экзаменуемый понимает, из каких этапов должно состоять решение задачи. При использовании сортировки она может быть реализована принципиально неверно (например, вместо двух циклов используется один), или допущена принципиальная ошибка в поиске нужных элементов. Всего допускается до 4 различных ошибок в реализации алгоритма, в том числе описанных в критериях присвоения двух баллов. Допускается наличие от одной до семи синтаксических ошибок, описанных выше. | 1 | Задание не выполнено или выполнено неверно. | 0 | Максимальный балл | 4 |

Формат задания

Развёрнутый ответ: короткого ответа здесь нет — оценивается само рассуждение. Разбор откроется после входа.

Решение по шагам

  1. Как рассуждать

    Решение. Программа читает все входные данные один раз, не запоминая их в массиве, размер которого соответствует числу входных данных N или максимальной цене (3000). Во время чтения данных определяются две минимальных цены и количество АЗС, продающих по 92-й бензин по этим ценам. При печати результата проверяется, что у кого-то цена больше минимальной (вторая по минимальности цена существует), в этом случае искомая (искомые) АЗС — со второй по величине ценой, если это не так, то искомая (искомые) АЗС — все, продающие 92-й бензин. Баллы начисляются только за программу, которая решает задачу хотя бы для одного частного случая (например, когда все АЗС продают бен¬зин по различной цене, и 92-й бензин продают не менее двух АЗС). Пример правильной и эффективной программы на языке Паскаль:var c: char; i, k, N, b, mini, min2, cntl, cnt2: integer; s,si,s2: string; begin mini:=3001; cntl:=0; readln(N); for i:=l to N do begin read(c) ; si := ' ' ; repeat s:=s+c; read(c);until c=' '; {считана компания} repeat s:=s+c; read(c) ;until c=' '; {улица добавлена к компании}readln(k,b);if k = 92 thenif mini > b thenbeginmin2:=minl; cnt2:=cntl; s2:=sl; minl:=b; cntl:=l; sl:=s end elseif mini = b then cntl:=cntl+l elseif min2 > b thenbeginmin2:=b; cnt2:=l; s2:=s end elseif min2 = b then cnt2:=cnt2+l end;if cnt2>0 thenif cnt2=l then writeln(s2) else writeln(cnt2) else {все АЗС продают 92-й бензин по одной цене} if cntl=l then writeln(sl) else writeln(cntl) ; writeln; end. Пример правильной программы на языке Бейсик:DIM s AS STRINGDIM si AS STRING, s2 AS STRINGmini = 3001 cntl = 0 INPUT nFOR j = 1 TO n LINE INPUT s i = 0 DOi = i + 1cMID - MID(s, i,

Осталось ещё 4 шага

  1. Шаг 2

  2. Шаг 3

  3. Шаг 4

  4. Шаг 5

Получить полное решение

Бесплатно · займёт минуту

Другие задачи по теме «Обработка символьных строк»

Эффективную, в том числе и по используемой памяти, программу (укажите — решение с объяснением | Lom Ai