На вход программе подаются сведения о пассажирах, желающих сдать свой багаж в камеру хранения на заранее известное время до полуночи. В первой строке сообщается число пассажиров N, которое не меньше 3, но не превосходит 1000; во второй строке – количество ячеек в камере хранения K, которое не меньше 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
Объяснение
В программе создадим массив, в котором будем хранить информацию о ячейках. В этом массиве мы будем записывать время освобождения багажа. Когда приходит пассажир, мы сравниваем время сдачи багажа с временем, которое записано в массиве, если оно меньше, то заменяем время в массиве на время сдачи и выводим имя пассажира и номер ячейки, в противном случае ничего не делаем
Решение на языке Pascal
Показать решение
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
var N, K: word; //Количество пассажиров и ячеек cells: array of array [0..1] of byte; //Информация о ячейках visitor: string; //Имя пассажира luggage_out_min, luggage_out_hour: byte; //Время сдачи багажа (минуты и часы) luggage_in_min, luggage_in_hour: byte; //Время получения багажа (минуты и часы) l: byte; //Вспомогательная переменная function perevod(str: string): byte; //Функция перевода часов и минут из строк в числа var c, c1: byte; err: integer; begin if str[1] = '0' then begin val(str[1], c, err); perevod := c; end else begin val(str[1], c1, err); val(str[2], c, err); perevod := c1 * 10 + c; end; end; begin readln(N); readln(K); SetLength(cells, K); //Задаем длину массива для хранения информации о ячейках for var i := 0 to K - 1 do //Заполняем массив begin cells[i][0] := 0; //Часы cells[i][1] := 0; //Минуты end; for var i := 1 to N do begin readln(visitor); l := length(visitor); {С помощью срезов заполняем переменные} luggage_out_min := perevod(visitor[l - 1:]); luggage_out_hour := perevod(visitor[l - 4:l - 2]); luggage_in_min := perevod(visitor[l - 7:l - 5]); luggage_in_hour := perevod(visitor[l - 10:l - 8]); visitor := visitor[:l - 11]; for var j := 0 to K - 1 do if (cells[j][0] < luggage_in_hour) or ((cells[j][0] = luggage_in_hour) and (cells[j][1] <= luggage_in_min)) then begin cells[j][0] := luggage_out_hour; cells[j][1] := luggage_out_min; writeln(visitor, ' ', j + 1); break end; end; end. |
Решение на языке Python
Показать решение
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
N = int(input()) #Количество пассажиров K = int(input()) #Количество ячеек cells = ['0'] * K #Информация о ячейках for i in range(N): visitor = input() luggage_out_min = visitor[-2:] luggage_out_hour = visitor[-5:-3] luggage_in_min = visitor[-8: -6] luggage_in_hour = visitor[-11: -9] visitor = visitor[:-12] for j in range(K): if int(cells[j][0:2]) < int(luggage_in_hour) or (int(cells[j][0:2]) == int(luggage_in_hour) and int(cells[j][3:5]) <= int(luggage_in_min)): cells[j] = luggage_out_hour + ':' + luggage_out_min print(visitor + ' ' + str(j + 1)) break |
Похожие задачи: 7416