26.06 Распределение объектов по местам (хранение багажа, парковки, кафе, гостиницы)
Ошибка.
Попробуйте повторить позже
В школьной столовой всего есть 270 посадочных мест. Места делятся на две категории: для сотрудников школы и для детей. Для сотрудников школы выделено 20 мест, для детей - 250. Сотрудник школы может занять любое место в своей категории, при этом, если все места заняты, он может пересесть на место для детей. Однако ребенок не может сесть на место, предназначенное для сотрудника школы. Занять место можно одновременно с его освобождением – в ту же минуту. Если человек не находит себе свободного места, он уходит из столовой голодный.
Входные данные.
Первая строка входного файла содержит целое число – общее количество людей в школе, которые за учебный
день придут в столовую. Каждая из следующих
строк описывает человека и содержит 2 целых числа и букву.
Первое число означает время в минутах с начала суток, когда человек пришёл в столовую, второе –
необходимую длительность обеда в минутах. Буква означает тип человека:
– ребенок,
– сотрудник
школы.
Гарантируется, что одновременно два человека не может прийти в столовую.
Выходные данные.
В ответе запишите два целых числа: сначала количество человек, которые смогут пообедать, затем – общее количество человек, которые уйдут из-за отсутствия мест.
file = open(’26_7__1vv36.txt’) # Считываем количество людей в файле count_people = int(file.readline()) peoples = [] # Список, в котором будут записаны люди for i in range(count_people): start,duration,type = file.readline().split() # Считываем текущую строку start,duration = int(start),int(duration) # Переводим в число время прихода и длительность обеда # Используем функцию ord для перевода буквы в число и проверяем равно ли 0. А станет 1, а В станет 0. Это сделано для удобства дальнейшего обращения со списком type = (ord(type) % 65) == 0 peoples.append([start,duration,type]) # Симулируем столовую. 20 мест для учителей, 250 мест - для детей places = [[-1 for i in range(20)],[-1 for i in range(250)]] count = 0 # Перебор людей for start,duration,category in peoples: ok = False # Флаг, который указывает нашли ли место для человека или нет # Перебор категории посадочных мест for cat in range(category,2): # Перебор посадочных мест определенной категории for i in range(len(places[cat])): # Если время прихода больше времени освобождения человеком, который уже занял данное место if start > places[cat][i]: places[cat][i] = start + duration # То записываем время освобождения места текущим человеком count += 1 # Увеличиваем счётчик ok = True # Отмечаем, что нашли место для человека break # Сбрасываем цикл if ok: # Если для текущего человека нашли место break # То сбрасываем цикл и переходим к следующему человеку print(count,count_people - count)
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!
Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение
Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты
Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей
Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!