Тема 26. Обработка целочисленной информации с использованием сортировки

26.06 Распределение объектов по местам (хранение багажа, парковки, кафе, гостиницы)

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела обработка целочисленной информации с использованием сортировки
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#63979

В школьной столовой всего есть 270 посадочных мест. Места делятся на две категории: для сотрудников школы и для детей. Для сотрудников школы выделено 20 мест, для детей - 250. Сотрудник школы может занять любое место в своей категории, при этом, если все места заняты, он может пересесть на место для детей. Однако ребенок не может сесть на место, предназначенное для сотрудника школы. Занять место можно одновременно с его освобождением – в ту же минуту. Если человек не находит себе свободного места, он уходит из столовой голодный.

Входные данные.

Первая строка входного файла содержит целое число N  – общее количество людей в школе, которые за учебный день придут в столовую. Каждая из следующих N  строк описывает человека и содержит 2 целых числа и букву. Первое число означает время в минутах с начала суток, когда человек пришёл в столовую, второе – необходимую длительность обеда в минутах. Буква означает тип человека: A  – ребенок, B  – сотрудник школы.

Гарантируется, что одновременно два человека не может прийти в столовую.

Выходные данные.

В ответе запишите два целых числа: сначала количество человек, которые смогут пообедать, затем – общее количество человек, которые уйдут из-за отсутствия мест.

Вложения к задаче
Показать ответ и решение
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)

Ответ: 740 0

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

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

Бесплатное онлайн-обучение

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

Налоговые вычеты

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

Специальное предложение
для учителей

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

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!