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

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

В первой строке сообщается число желающих N, которое не меньше 10, но

Условие

На вход программе подаются сведения о посетителях, желающих попасть в популярное кафе. В первой строке сообщается число желающих N, которое не меньше 10, но не превосходит 1000, и количество столиков, которое не меньше 10, но не превосходит 1000. Каждая из следующих N строк имеет следующий формат: <Фамилия> <время прихода> < время ухода>, где <Фамилия> — строка, состоящая не более чем из 20 символов; <время прихода> — через двоеточие два целых числа, соответствующие часам (от 00 до 23 — ровно 2 символа) и минутам (от 00 до 59 — ровно 2 символа); <время ухода> имеет тот же формат. <Фамилия> и <время прихода>, а также <время прихода> и <время ухода> разделены одним пробелом. Сведения отсортированы в порядке времени прихода. Каждому следующему посетителю выделяется свободный столик с минимальным номером. Если в момент прихода свободных столиков нет, то посетитель уходит, не дожидаясь освобождения одного из них. Требуется написать эффективную программу, которая будет выводить на экран для каждого посетителя номер столика, который ему будет предоставлен (можно сразу после ввода данных очередного посетителя). Укажите используемую версию языка программирования, например Borland Pascal 7.0. Пример входных данных:3 10Иванов 09:45 12:00Петров 10:00 11:00Сидоров 12:00 13:12 Результат работы программы на этих входных данных:Иванов 1Петров 2Сидоров 1 4 балла ставится за эффективную и правильно работающую программу, которая, возможно, содержит одну синтаксическую ошибку.3 балла ставится в случае, когда задача фактически решена, но программа содержит до трёх синтаксических ошибок, или если допущена одна содержательная ошибка, или если все входные данные сохраняются в массиве или иной структуре данных (программа неэффективна по памяти, но эффективна по времени работы).2 балла ставится, если программа неэффективна по времени работы (перебираются все возможные пары элементов), или в программе две содержательные ошибки, либо шесть-семь синтаксических ошибок.1 балл ставится, если программа написана неверно, но из описания алгоритма и общей структуры программы видно, что экзаменуемый в целом правильно представляет путь решения задачи.

Далее уточняются перечисленные выше критерии.

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

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

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

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

    Решение. Программа верно читает входные данные, сразу запоминая только время ухода в массиве, соответствующем столикам. Подходящий столик определяется путём последовательного просмотра элементов этого массива до первого свободного или такого, в котором записано время окончания, не превосходящее времени прихода текущего посетителя. В случае удачного выбора столика фамилия посетителя и номер столика распечатываются. Баллы начисляются только за программу, которая решает задачу хотя бы для частного случая (например, желающих меньше, чем столиков). Время при считывании удобно перевести в минуты и в этом же виде хранить. Пример правильной и эффективной программы на языке Паскаль: var p:array[1..1000] of integer;c,c1:char;i,j,N,K:integer;name:string;time1,time2:integer;beginreadln(N,K);for i:=1 to K dop[i]:=0;for i:=1 to N dobeginname:='';repeatread(c);name:=name+cuntil c=' '; {cчитана фамилия}read(c,c1); {cчитаны чаcы первого времени}time1:=60*((ord(c)-ord('0'))*10+ ord(c1)-ord('0'));read(c,c,c1); {пропущено двоеточие, и cчитаны минуты}time1:=time1+(ord(c)-ord('0'))10+ord(c1)-ord('0');read(c,c,c1); {cчитаны чаcы второго времени}time2:=60((ord(c)-ord('0'))*10+ ord(c1)-ord('0'));readln(c,c,c1); {пропущено двоеточие, и cчитаны минуты}time2:=time2+(ord(c)-ord('0'))*10+ord(c1)-ord('0');for j:=1 to K doif p[j]<=time1 thenbeginp[j]:=time2;writeln(name,' ',j);break;endend;end. Пример правильной и эффективной программы на языке Бейсик: DIM p(1000) AS INTEGER DIM s AS STRING DIM nm AS STRING INPUT n INPUT k FOR i = 1 TO k p(i) = 0 NEXT i FOR j = 1 TO n LINE INPUT s c=MID = MID(s, 1,

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

  1. i = 1 WHILE NOT (c = " ") i = i + 1 c =…

  2. WEND nm = MID(s, 1, i) time1 = (ASC(MID(s, i…

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

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

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

В первой строке сообщается число желающих N, которое не меньше 10, но — решение с объяснением | Lom Ai