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

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

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

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

Задача 1#81220

В городе N расположено тайм-кафе (кафе, в котором люди платят не за продукты и заказы, а за то, сколько времени они провели в нём). 1 минута – 7 рублей. Входной файл содержит заявки клиентов. В заявке указано время прихода клиента и время ухода клиента. Клиент занимает один из столиков с минимальным номером. Столы пронумерованы начиная с единицы. Следующий клиент может занять столик со следующей минуты после освобождения столика. Если пришло несколько клиентов одновременно, то садится за стол клиент с наименьшим временем пребывания. Минута ухода клиента не идёт в учёт стоимости его посещения заведения. Если в момент прибытия клиента все столы заняты, то клиент ждёт ближайший столик, который освободится раньше всего, не более 10 минут и садится за него. Если за 10 минут не нашлось свободного столика, то клиент уходит. Тайм-кафе в качестве компенсации предоставляет ему такое количество бесплатных минут, равное времени его ожидания столика. Клиент обязательно пробудет T минут (T – разница между временем прибытия и отбытия) и дополнительно проведет компенсированное время в тайм-кафе. Определите сколько клиентов сможет занять столик, а также сколько рублей тайм-кафе заработает.

Входные данные: В первой строке файла находится натуральное число K, не превышающее 1000, – количество столиков в тайм кафе. Во второй строке файла находится натуральное число N, не превышающее 1000 – количество клиентов. В последующих строках записано по два числа, не превышающих 1440: время прибытия клиента, время ухода клиента.

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

Вложения к задаче
Показать ответ и решение

Решение (Python)

file = open(’26_1__3cjum.txt’)
count_tables = int(file.readline())  # количество столиков в тайм-кафе
count_client = int(file.readline())  # количество клиентов

# считываем и сортируем время прибытия и ухода для каждого клиента
array_client = sorted(list(map(int, i.split())) for i in file)

count = 0  # количество клиентов, занявших столик
cost = 0  # сумма заработанных денег

# инициализируем список, в котором будем хранить  у соответствующего столика время ухода клиента
tables = [-1] * count_tables

for start, end in array_client:  # проходимся циклом по каждому клиенту
    ok = False  # флаг, сел клиент за столик или нет
    for i in range(len(tables)):  # проходимся по списку столиков
        if start >= tables[i] + 1:  # если время прибытия клиента больше, чем значение у столика
            tables[i] = end  # тогда записываем за столик время ухода клиента
            count += 1
            cost += 7 * (end - start)  # 1 минута = 7 рублей.
            ok = True
            break

    if not ok:  # если флаг равен False
        min_table = min(tables)  # ищем ближайшее время ухода другого клиента
        wait = min_table - start + 1  # Высчитываем время ожидания клиента,
        # количество минут, которое клиенту нужно подождать чтобы занять место за столиком
        if wait <= 10:  # если ожидание меньше 10 минут
            ind = tables.index(min_table)
            T = end - start
            # Увеличиваем время освобождения найденного столика на:
            # 1 - так как нужно учесть, что сесть можно со следующей минуты
            # Т - так как клиент ждал столика Т минут
            # wait - так как ему добавили бесплатные минуты за ожидание
            tables[ind] += 1 + T + wait
            count += 1
            cost += 7 * T
            ok = True

print(count, cost)

Ответ: 107 243712

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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