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

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

Задача 1#87934

На магазине есть N камер хранения для пассажиров, которые пронумерованы с нуля. Приходя на вокзал, пассажир кладет свои вещи в свободную камеру с минимальным номером. Известно время, когда пассажиры сдают и забирают вещи (в минутах с начала суток). Камера доступна для багажа начиная со следующей минуты после окончания срока хранения. В случае, когда свободных камер не находится, багаж не принимается и пассажир уходит.

Найдите номер камеры, в которую сдаст багаж последний пассажир и номер самой популярной камеры (камеры, которой пользовались больше всего раз).

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

Выходные данные. Программа должна вывести два числа через пробел: номер камеры, в которую сдаст багаж последний пассажир и номер самой популярной камеры.

Вложения к задаче
Показать ответ и решение
f = open(’26_9.txt’)
k = int(f.readline())
n = int(f.readline())
a = sorted(list(map(int, i.split())) for i in f)
count = [0] * n
camera = [-1] * n
last = 0
for start, end in a:
    for i in range(len(camera)):
        if start > camera[i]:
            camera[i] = end
            count[i] += 1
            last = i
            break
print(count.index(max(count)), last)

Ответ: 0 19

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

Задача 2#87924

В новом городе Подмосковске открылся новый ресторан - Кафеск. В нем есть А столиков. После каждого клиента, посетившего ресторан, необходимо убрать столик, на это уходит 8 минут. Уборка начинается в следующую минуту после ухода клиента. Новый клиент может сесть в следующую минуту после завершения уборки. Ресторан работает с 8:00 и закрывается в 22:30. Все клиенты должны уйти не позже 22:30. За это время в него приходит В клиентов. (Гарантируется, что они придут не раньше 8:00, а планируют уйти не позже 22:30).

Каждого гостя при входе встречает администратор и подбирает для него стол с минимальным номером. Может случиться так, что несколько людей придет одновременно, тогда администратор в первую очередь подбирает столик для того, кто планирует сидеть меньшее время. В случае если все столы заняты, гость готов подождать не более 45 минут, при этом за столом он пробудет обязательно T минут (T – разница между временем прибытия и отбытия), в этом случае выбирается столик, который освободится раньше всего. Если таких несколько, выбирается с меньшим номером.

Определите, сколько клиентов получится обслужить за время работы ресторана и номер клиента, который последний сможет сесть за столик. (Клиентов считают с начала дня начиная с 1).

Входные данные На первой строке одно число В – количество гостей, пришедших за день. На второй строке одно число А – количество столиков в ресторане. Далее В строк, в каждой из которых указано время, когда клиент пришел и время, до которого он планировал пробыть в ресторане (время дано в минутах от начала дня).

Вложения к задаче
Показать ответ и решение
f = open(’26_dif_4.txt’)
n = int(f.readline())
k = int(f.readline())

clients = [list(map(int, i.split())) for i in f]
clients.sort()
tables = [-1] * k

cnt = 0
number = 0
client_num = 0

for start, end in clients:
    # Считаем клиентов, у первого номер 1
    number += 1
    is_sat = False
    for i in range(k):
        if start >= tables[i]:
            # Пример: предыдущий клиент уходит в 10-ю минуту
            # В 11-ю минуту начинается освобождение
            # Освобождение длится 8 минут: 11-я, 12-я, 13-я, 14-я, 15-я, 16-я, 17-я, 18-я
            # В 19-ю минуту может занять следующий клиент
            # Значит, если в условии не строгий знак, то прибавлять нужно 9
            tables[i] = end + 9
            is_sat = True
            cnt += 1
            client_num = number
            break
    if not is_sat:
        # Минимальное время освобождения столика
        min_time = min(tables)
        if start + 45 >= min_time:
            # Индекс столика с минимальным временем в нашем списке
            index = tables.index(min_time)
            # Время пребывания клиента за столом
            T = end - start
            # Проверяем, что клиент уйдёт до закрытия
            # 22 * 60 + 30 - это 22:30
            if tables[index] + T <= 22 * 60 + 30:
                tables[index] += T + 9
                cnt += 1
                client_num = number

                                                                                                  
                                                                                                  
print(cnt, client_num)

Ответ: 859 2793

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

Задача 3#87923

В магазине есть N камер хранения. В магазин приходят покупатели и оставляют свои вещи в камерах хранения. Покупатель занимает одну из камер с минимальным номером. Нумерация камер начинается с 1. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Освобождение начинается в следующую минуту после того, как покупатель забирает свои вещи, и длится 5 минут. Время, которое занята ячейка, не учитывает время освобождения ячейки и равняется разности времени ухода и времени прибытия клиента. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю. Если свободных камер нет, то покупатели уходят. Если в один момент пришло несколько покупателей, то сначала вещи в камеру положит клиент, у которого меньшее количество времени вещи будут находиться в камере.

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

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

Вложения к задаче
Показать ответ и решение
f = open(’26_dif_3.txt’)
n = int(f.readline())
k = int(f.readline())

clients = [list(map(int, i.split())) for i in f]
clients.sort()
cameras = [-1] * k

cnt = 0
sm = 0

for start, end in clients:
    for j in range(k):
        if start > cameras[j]:
            # Пример: предыдущий клиент уходит в 10-ю минуту
            # В 11-ю минуту начинается освобождение
            # Освобождение длится 5 минут: 11-я, 12-я, 13-я, 14-я, 15-я
            # В 16-ю минуту может занять следующий клиент
            # Значит, если в условии строгий знак, то прибавлять нужно 5
            cameras[j] = end + 5
            cnt += 1
            sm += end - start
            break

print(n - cnt, sm)

Ответ: 1858 244078

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

Задача 4#87452

В магазине есть N камер хранения. В магазин приходят покупатели и оставляют свои вещи в камерах хранения. Покупатель занимает одну из камер с минимальным номером. Нумерация камер начинается с 1. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю. Если свободных камер нет, то покупатели уходят. Если в один момент пришло несколько покупателей, то сначала вещи в камеру положит клиент, у которого меньшее количество времени вещи будут находиться в камере.

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

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

Вложения к задаче
Показать ответ и решение
file = open(’26_L1.txt’)
count_client = int(file.readline())
count_cameras = int(file.readline())
array_client = sorted(list(map(int, i.split())) for i in file)
count = [0] * count_cameras
cameras = [-1] * count_cameras
last = 0
for start, end in array_client:
    for i in range(len(cameras)):
        if start > cameras[i]:
            cameras[i] = end
            count[i] += 1
            last = i + 1
            break
print(sum([count[i] for i in range(len(count)) if i % 2 != 0]))
# Проверяем, что i - нечётный номер,
# поскольку его отсчёт начинается с 0, а нумерация камер начинается с 1
# Это значит, что если i = 0 - чётное число, то это 1-ая камера - нечётная
# И наоборот, если i = 1 - нечётное число, то это 2-ая камера - чётная.
print(last)

Ответ: 135 1

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

Задача 5#86178

В магазине есть N камер хранения. Номера камер начинаются с 1. В магазин приходят покупатели и оставляют свои вещи в камерах хранениях. Покупатель занимает одну из камер с минимальным номером. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю. Если свободных камер нет, то покупатели уходят. Если осталась свободной только одна камера, а в один момент пришло несколько покупателей, то вещи в камеру положит клиент, у которого меньшее количество времени вещи будут находиться в камере.

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

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

Вложения к задаче
Показать ответ и решение
file = open(’R4_26.txt’)
count_cameras = int(file.readline())
count_client = int(file.readline())
array_client = sorted(list(map(int,i.split())) for i in file)
cameras = [-1]*count_cameras
count = [0]*count_cameras
for start,end in array_client:
    for i in range(len(cameras)):
        if start > cameras[i]:
            cameras[i] = end
            count[i] += 1
            break
print(count.index(min(count))+1)
print(cameras[count.index(max(count))])

Ответ: 14 1439

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

Задача 6#86177

В магазине есть N камер хранения. Номера камер начинаются с 1. В магазин приходят покупатели и оставляют свои вещи в камерах хранениях. Покупатель занимает одну из камер с минимальным номером. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю. Если свободных камер нет, то покупатели уходят. Если осталась свободной только одна камера, а в один момент пришло несколько покупателей, то вещи в камеру положит клиент, у которого большее количество времени вещи будут находиться в камере.

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

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

Вложения к задаче
Показать ответ и решение
file = open(’R3_26.txt’)
count_client = int(file.readline())
count_cameras = int(file.readline())
array_client = list(list(map(int,i.split())) for i in file)
array_client.sort(key = lambda x:(x[0],-x[1]))
visitors = []
cameras = [-1]*count_cameras
for start,end in array_client:
    for i in range(len(cameras)):
        if start > cameras[i]:
            cameras[i] = end
            visitors.append(i+1)
            break
print(len(visitors),visitors[-2])

Ответ: 126 15

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

Задача 7#86176

В магазине есть N камер хранения. Номера камер начинаются с 1. В магазин приходят покупатели и оставляют свои вещи в камерах хранениях. Покупатель занимает одну из камер с минимальным номером. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю. Если свободных камер нет, то покупатели уходят. Если осталась свободной только одна камера, а в один момент пришло несколько покупателей, то вещи в камеру положит клиент, у которого меньшее количество времени вещи будут находиться в камере.

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

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

Вложения к задаче
Показать ответ и решение
file = open(’R3_26.txt’)
count_client = int(file.readline())
count_cameras = int(file.readline())
array_client = sorted(list(map(int,i.split())) for i in file)
cameras = [-1]*count_cameras
count = [0]*count_cameras
visitors = []#список, в котором мы будем сохранять длительность пребывания вещей
# и номер камеры, в которую положил вещи клиент
for start,end in array_client:
    for i in range(len(cameras)):
        if start > cameras[i]:
            cameras[i] = end
            count[i] += 1
            visitors.append((end-start,i+1))
            break
print(count.index(max(count))+1)
visitors = sorted(visitors,reverse=True)
print(visitors[0][1])

Ответ: 1 5

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

Задача 8#86175

В магазине есть N камер хранения. Номера камер начинаются с 1. В магазин приходят покупатели и оставляют свои вещи в камерах хранениях. Покупатель занимает одну из камер с минимальным номером. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю. Если свободных камер нет, то покупатели уходят. Если в один момент пришло несколько покупателей, то сначала вещи в камеру положит клиент, у которого меньшее количество времени вещи будут находиться в камере.

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

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

Вложения к задаче
Показать ответ и решение
file = open(’R2_26.txt’)
count_client = int(file.readline())
count_cameras = int(file.readline())
array_client = sorted(list(map(int,i.split())) for i in file)
cameras = [-1]*count_cameras
schedule = [0]*1501#Поминутный график работы магазина.
# Значение в списке будет показывать сколько занято камер в данную минуту.
count = 0
for start,end in array_client:
    for i in range(len(cameras)):
        if start > cameras[i]:
            cameras[i] = end
            count += 1
            for time in range(start,end):
                schedule[time] += 1
            break
print(count,len([x for x in schedule if x == count_cameras]))

Ответ: 289 978

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

Задача 9#86174

В магазине есть N камер хранения. Номера камер начинаются с 1. В магазин приходят покупатели и оставляют свои вещи в камерах хранениях. Покупатель занимает одну из камер с минимальным номером. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю. Если свободных камер нет, то покупатели уходят. Если в один момент пришло несколько покупателей, то сначала вещи в камеру положит клиент, у которого большее количество времени вещи будут находиться в камере.

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

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

Вложения к задаче
Показать ответ и решение
file = open(’R2_26.txt’)
count_client = int(file.readline())
count_cameras = int(file.readline())
array_client = list(list(map(int,i.split())) for i in file)
array_client.sort(key = lambda x:(x[0],-x[1]))
cameras = [-1]*count_cameras
count = 0
schedule = [0]*1501#Поминутный график работы магазина.
# Значение в списке будет показывать сколько занято камер в данную минуту.
for start,end in array_client:
    for i in range(len(cameras)):
        if start > cameras[i]:
            cameras[i] = end
            count += 1
            for time in range(start,end):
                schedule[time] += 1
            break
print(count,schedule.index(max(schedule)))

Ответ: 256 64

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

Задача 10#86173

В прачечной есть K стиральных машин, которые пронумерованы с 1. Принимаемые вещи кладутся в свободную стиральную машину с минимальным номером. Известно время, когда пассажиры сдают и забирают вещи (в минутах с начала суток). Среди стиральных машин есть супер-стиральные машины, они стирают вещи в два раза быстрее. У таких машин номер кратен 3. Если время стирки было нечётным, то оно округляется в меньшую сторону. Стиралка доступна для вещей, начиная со следующей минуты, после окончания срока хранения. Если свободных машинок не находится, то вещи не принимаются в стиральную машину. Если в один момент пришло несколько клиентов, то в первую очередь, вещи принимаются у того, чья стирка займет большее время.

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

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

Программа должна вывести два числа через пробел: количество сданных в стиральные машины вещей и номер стиралки, в которую примут вещи у последнего клиента, который сможет сдать вещи.

Вложения к задаче
Показать ответ и решение
file = open(’R1_26.txt’)
count_machines = int(file.readline())
count_client = int(file.readline())
array_client = list(list(map(int,i.split())) for i in file)
array_client.sort(key = lambda x:(x[0],-x[1]))
machines = [-1]*count_machines
count = 0
last = 0
for start,end in array_client:
    for i in range(len(machines)):
        if start > machines[i]:
            if (i+1) % 3 == 0:
                machines[i] = start + ((end - start) // 2)
            else:
                machines[i] = end
            count += 1
            last = i + 1
            break
print(count,last)

Ответ: 156 3

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

Задача 11#86172

В прачечной есть K стиральных машин, которые пронумерованы с 1. Принимаемые вещи кладутся в свободную стиральную машину с минимальным номером. Известно время, когда пассажиры сдают и забирают вещи (в минутах с начала суток). Среди стиральных машин есть супер-стиральные машины, они стирают вещи в два раза быстрее. У таких машин номер кратен 5. Если время стирки было нечётным, то оно округляется в меньшую сторону. Стиралка доступна для вещей, начиная со следующей минуты, после окончания срока хранения. Если свободных машинок не находится, то вещи не принимаются в стиральную машину. Если в один момент пришло несколько клиентов, то в первую очередь, вещи принимаются у того, чья стирка займет меньшее время.

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

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

Программа должна вывести два числа через пробел: количество сданных в стиральные машины вещей и номер стиралки, в которую примут вещи у последнего клиента, который сможет сдать вещи.

Вложения к задаче
Показать ответ и решение
file = open(’R1_26.txt’)
count_machine = int(file.readline())
count_client = int(file.readline())
array_client = sorted(list(map(int,i.split())) for i in file)
machines = [-1] * count_machine
count = 0
last = 0
for start,end in array_client:
    for i in range(len(machines)):
        if start > machines[i]:
            if (i+1) % 5 == 0:
                machines[i] = start + ((end - start) // 2)
            else:
                machines[i] = end
            count += 1
            last = i + 1
            break
print(count,last)

Ответ: 135 3

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

Задача 12#81238

В магазине есть N камер хранения. Номера камер начинаются с 1. В магазин приходят покупатели и оставляют свои вещи в камерах хранениях. Покупатели приходят с вещами различных габаритов (маленький, средний, большой) и занимают камеру, подходящую под хранение вещи по её габаритам. Если камеры для хранения вещи подходящей по ее размерам нет, то покупатель уходит. Покупатель занимает одну из камер с минимальным номером. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Освобождение камеры длится 6 минут и начинается на следующую минуту после ухода клиента. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю, а также категория размера вещи покупателя (A – маленькая, B – средняя, C – большая). Если осталась свободной только одна камера, а в один момент пришло несколько покупателей, то вещи в камеру положит клиент, у которого большее количество времени вещи будут находиться в камере.

Входные данные: В первой строке файла находится натуральное число K, не превышающее 1000, - количество покупателей. Во второй строке файла находится три натуральных числа N, M, V: N – количество камер хранения категории А, M – количество камер хранения категории B, V – количество камер хранения категории C. В последующих строках записано по два числа и букве, не превышающих 1500: время прибытия клиента, время ухода клиента, размер вещи покупателя.

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

Вложения к задаче
Показать ответ и решение
file = open(’26_12.txt’)
count_client = int(file.readline())
cat_A, cat_B, cat_C = map(int, file.readline().split())
array_client = []
for i in file:
    temp = i.split()
    start, end, category = int(temp[0]), int(temp[1]), ord(temp[2]) % 65
    array_client += [[start,end,category]]
array_client.sort(key=lambda x: (x[0], -x[1]))
count_cameras = [0, 0, 0]
cameras_A = [-1] * cat_A
cameras_B = [-1] * cat_B
cameras_C = [-1] * cat_C
cameras = [cameras_A, cameras_B, cameras_C]
for start,end,category in array_client:
    for i in range(len(cameras[category])):
        if start > cameras[category][i]:
            cameras[category][i] = end + 6
            count_cameras[category] += 1
            break
print(sum(count_cameras),max(count_cameras)-min(count_cameras))

Ответ: 196 57

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

Задача 13#81237

В магазине есть N камер хранения. Номера камер начинаются с 1. В магазин приходят покупатели и оставляют свои вещи в камерах хранениях. Покупатели приходят с вещами различных габаритов (маленький, средний, большой) и занимают камеру, подходящую под хранение вещи по её габаритам. Если камеры для хранения вещи подходящей по ее размерам нет, то покупатель может положить свою вещь в камеру предназначенной для более габаритных вещей. Покупатель занимает одну из камер с минимальным номером. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Освобождение камеры длится 4 минуты и начинается в минуту ухода покупателя. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю, а также категория размера вещи покупателя (A – маленькая, B – средняя, C – большая). Если в один момент пришло несколько покупателей, то вещи в камеру положит клиент, у которого большее количество времени вещи будут находиться в камере.

Входные данные: В первой строке файла находится натуральное число K, не превышающее 1000, - количество покупателей. Во второй строке файла находится три натуральных числа N, M, V: N – количество камер хранения категории А, M – количество камер хранения категории B, V – количество камер хранения категории C. В последующих строках записано по два числа и букве, не превышающих 1500: время прибытия клиента, время ухода клиента, размер вещи покупателя.

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

Вложения к задаче
Показать ответ и решение
file = open(’26_12.txt’)
count_client = int(file.readline())
cat_A, cat_B, cat_C = map(int, file.readline().split())
array_client = []
for i in file:
    temp = i.split()
    start, end, category = int(temp[0]), int(temp[1]), ord(temp[2]) % 65
    array_client += [[start,end,category]]
array_client.sort(key=lambda x: (x[0], -x[1]))
count_cameras = [0, 0, 0]
cameras_A = [-1] * cat_A
cameras_B = [-1] * cat_B
cameras_C = [-1] * cat_C
cameras = [cameras_A, cameras_B, cameras_C]
for start,end,category in array_client:
    ok = False
    for cat in range(category,3):
        for i in range(len(cameras[cat])):
            if start > cameras[cat][i]:
                cameras[cat][i] = end + 3
                count_cameras[cat] += 1
                ok = True
                break
        if ok:
            break
print(sum(count_cameras),chr(count_cameras.index(max(count_cameras)) + 65))

Ответ: 203 C

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

Задача 14#81236

В магазине есть N камер хранения. В магазин приходят покупатели и оставляют свои вещи в камерах хранениях. Покупатель занимает одну из камер с минимальным номером. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Освобождение камеры длится 5 минут. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю. Если свободных камер нет, то покупатели уходят. Если в один момент пришло несколько покупателей, то сначала вещи в камеру положит клиент, у которого большое количество времени вещи будут находиться в камере.

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

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

Вложения к задаче
Показать ответ и решение
file = open(’26_9.txt’)
count_client = int(file.readline())
count_cameras = int(file.readline())
array_client = list(list(map(int,i.split())) for i in file)
array_client.sort(key = lambda x:(x[0],-x[1]))
cameras = [-1]*count_cameras
count = 0
sum_time = 0
for start,end in array_client:
    for i in range(len(cameras)):
        if start > cameras[i]:
            cameras[i] = end + 5
            count += 1
            sum_time += (end - start)
            break
print(count,sum_time)

Ответ: 233 77946

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

Задача 15#81235

В заведении M есть K столиков и C камер хранения. Заведение работает с 8:00 до 22:00. Клиенты приходят в заведение в определенный период, говорят на какой период времени хотят посетить заведение, а также требуется ли клиенту камеру хранения (0 – не требуется, 1 – требуется). Клиент остается и наслаждается проведенным временем, только в случае если его условия выполнены. Если одновременно пришло несколько людей, то сначала регистрируем того, кто больше проведет в кафе. Следующий клиент может занять столик в следующую минуту после освобождения. Следующий клиент может занять камеру хранения в следующую минуту после освобождения. Освобождение стола длится 6 минут. Освобождение камеры хранения – 2 минуты. Освобождение камеры хранения, стола начинается в следующую минуту после ухода клиента. Нумерация столов и камер хранения начинается с 1. Нужно определить количество человек, которое останется в заведении, а также номер столика, за который сядет последний клиент.

Входные данные: В первой строке записано первое число N – количество клиентов. Во второй строке записаны числа K – количество столиков в заведении и C – количество камер хранения. В последующих строках записано по три неотрицательных числа: время прихода (время от начала суток), время, на которое человек хочет посетить заведение и нужна ли камера хранения клиенту или нет.

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

Вложения к задаче
Показать ответ и решение
file = open(’26_11.txt’)
count_client = int(file.readline())
count_tables,count_cameras = map(int,file.readline().split())
array_client = list(list(map(int,i.split())) for i in file)
array_client.sort(key = lambda x:(x[0],-x[1]))
count = 0
last = 0
cameras = [-1]*count_cameras
tables = [-1]*count_tables
for start,duration,needed in array_client:
    if start >= 8*60 and start + duration <= 22*60:
        if needed == 0:
            for i in range(len(tables)):
                if start > tables[i]:
                    tables[i] = start + duration + 6
                    count += 1
                    last = i + 1
                    break
        else:
            check = 0
            ind_temp_table = 0
            for i in range(len(tables)):
                if start > tables[i]:
                    ind_temp_table = i
                    check = 1
                    break
            if check == 1:
                for i in range(len(cameras)):
                    if start > cameras[i]:
                        cameras[i] = start + duration + 2
                        tables[ind_temp_table] = start + duration + 6
                        count += 1
                        last = ind_temp_table + 1
                        break
print(count,last)

Ответ: 143 6

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

Задача 16#81234

В заведении M есть K столиков и C камер хранения. Заведение работает с 6:00 до 21:00. Клиенты приходят в заведение в определенный период и говорят насколько они хотят забронировать столик и камеру хранения. Клиент остается и наслаждается проведенным временем, только в случае если он сел за столик и положил вещи в камеру хранения. Если одновременно пришло несколько людей, то сначала регистрируем того, кто меньше проведет в кафе. Следующий клиент может занять столик в следующую минуту после освобождения. Следующий клиент может занять камеру хранения в следующую минуту после освобождения. Освобождение стола длится 7 минут. Освобождение камеры хранения – 4 минуты. Освобождение камеры хранения и стола начинается в минуту ухода клиента. Нумерация столов и камер хранения начинается с 1. Нужно определить количество человек, которое забронирует и стол, и камеру хранения, а также номер столика, за который сядет последний клиент.

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

Запишите через ответ два числа: количество клиентов, которое сели за стол и положили вещи в камеру хранения и номер столика, за который сядет последний клиент.

Вложения к задаче
Показать ответ и решение
file = open(’26_10.txt’)
count_client = int(file.readline())
count_tables,count_cameras = map(int,file.readline().split())
array_client = sorted(list(map(int,i.split())) for i in file)
count = 0
last = 0
tables = [-1] * count_tables
cameras = [-1] * count_cameras
for start,duration in array_client:
    if start >= 6*60 and start+duration <= 21*60:
        check = 0
        ind_temp_table = 0
        for i in range(len(tables)):
            if start > tables[i]:
                ind_temp_table = i
                check += 1
                break
        if check >= 1:
            for i in range(len(cameras)):
                if start > cameras[i]:
                    cameras[i] = start+duration+3
                    tables[ind_temp_table] = start+duration+6
                    count += 1
                    last = ind_temp_table + 1
                    check += 1
                    break
print(count,last)

Ответ: 182 2

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

Задача 17#81233

В магазине есть N камер хранения. Номера камер начинаются с 1. В магазин приходят покупатели и оставляют свои вещи в камерах хранениях. Покупатель занимает одну из камер с минимальным номером. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю. Если свободных камер нет, то покупатели уходят. Если один момент пришло несколько покупателей, то сначала вещи в камеру положит клиент, у которого большее количество времени вещи будут находиться в камере.

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

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

Вложения к задаче
Показать ответ и решение
file = open(’26_9.txt’)
count_client = int(file.readline())
count_cameras = int(file.readline())
array_client = list(list(map(int,i.split())) for i in file)
array_client.sort(key = lambda x:(x[0],-x[1]))
count = 0
cameras = [-1]*count_cameras
number100 = 0
for start,end in array_client:
    for i in range(len(cameras)):
        if start > cameras[i]:
            cameras[i] = end
            count += 1
            if count == 100:
                number100 = i + 1
            break
print(count,number100)

Ответ: 256 4

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

Задача 18#81232

В заведении M есть K столиков и C камер хранения. Клиенты приходят в заведение в определенный период, говорят в какой период времени хотят уйти, а также требуется ли клиенту камеру хранения (0 – не требуется, 1 – требуется). Клиент остается и наслаждается проведенным временем, только в случае если его условия выполнены. Если одновременно пришло несколько людей, то сначала регистрируем того, кто меньше проведет в кафе. Следующий клиент может занять столик в следующую минуту после освобождения. Следующий клиент может занять камеру хранения в следующую минуту после освобождения. Освобождение стола длится 3 минуты. Освобождение камеры хранения – 2 минуты. Освобождение камеры хранения и стола начинается в следующую минуту после ухода клиента. Нумерация столов и камер хранения начинается с 1. Нужно определить количество человек, которое останется в заведении, а также номер столика, за который сядет последний клиент.

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

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

Вложения к задаче
Показать ответ и решение
file = open(’26_8.txt’)
count_client = int(file.readline())
count_tables, count_cameras = map(int,file.readline().split())
array_client = sorted(list(map(int,i.split())) for i in file)
count = 0
last = 0
tables = [-1]*count_tables
cameras = [-1]*count_cameras
for start,end,needed in array_client:
    if needed == 0:
        for i in range(len(tables)):
            if start > tables[i]:
                tables[i] = end + 3
                count += 1
                last = i + 1
                break
    else:
        check = 0
        ind_temp_table = 0
        for i in range(len(tables)):
            if start > tables[i]:
                ind_temp_table = i # сохраняем индекс столика, но пока не сажаем клиента за место
                check += 1
                break
        if check >= 1:#проверка на то,что мы смогли подобрать столик для клиента
            for i in range(len(cameras)):
                if start > cameras[i]:  # если условие выполнилось, то можем посадить человека за столик
                    cameras[i] = end + 2
                    tables[ind_temp_table] = end + 3
                    count += 1
                    check += 1
                    last = ind_temp_table + 1
                    break
print(count,last)

Ответ: 241 1

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

Задача 19#81231

В заведении M есть K столиков и C камер хранения. Клиенты приходят в заведение в определенный период и говорят во сколько они хотят покинуть заведение. Клиент остается и наслаждается проведенным временем, только в случае если он сёл за столик и положил вещи в камеру хранения. Если одновременно пришло несколько людей, то сначала регистрируем того, кто меньше проведет в кафе. Следующий клиент может занять столик в следующую минуту после освобождения. Следующий клиент может занять камеру хранения в следующую минуту после освобождения. Освобождение стола длится 5 минут. Освобождение камеры хранения – 2 минуты. Освобождение камеры хранения и стола начинается в минуту ухода клиента. Нумерация столов и камер хранения начинается с 1. Нужно определить количество человек, которое забронирует и стол, и камеру хранения, а также номер столика, за который сядет последний клиент.

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

Запишите через ответ два числа: количество клиентов, которое сели за стол и положили вещи в камеру хранения и номер столика, за который сядет последний клиент.

Вложения к задаче
Показать ответ и решение
file = open(’26_7.txt’)
count_client = int(file.readline())
count_tables, count_cameras = map(int,file.readline().split())
array_client = sorted(list(map(int,i.split())) for i in file)
tables = [-1]*count_tables
cameras = [-1]*count_cameras
count = 0
last = 0
for start,end in array_client:
    check = 0
    ind_temp_table = 0
    for i in range(len(tables)):
        if start > tables[i]:
            ind_temp_table = i#сохраняем индекс столика, но пока не сажаем клиента за место
            check += 1
            break
    if check >= 1:#проверка на то,что мы смогли подобрать столик для клиента
        for i in range(len(cameras)):
            if start > cameras[i]:#если условие выполнилось, то можем посадить человека за столик
                cameras[i] = end + 1
                tables[ind_temp_table] = end + 4
                count += 1
                check += 1
                last = ind_temp_table + 1
                break
print(count,last)

Ответ: 138 2

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

Задача 20#81230

БУ ушёл из преподавания и вместо этого открыл свою гостиницу. Гостиница 3-этажная, на первом этаже квартиры стоят 100$, на втором – 200$, на третьем – 300$. К БУ в гостиницу приходят клиенты, известно о каждом клиенте во сколько он хочет заселиться, во сколько хочет уехать из гостиницы и сколько долларов у гостя с собой. БУ хочет максимальной прибыли, поэтому он заселяет гостей в лучшие квартиры, которые гости могут себе позволить. Если таких квартир нет, то клиент уходит. Если несколько гостей пришло одновременно, то сначала заселяем того, кто заезжает на более длительный срок. Следующий гость может занять комнату в следующую минуту после освобождения (да-да БУ моментально убирается в комнате и гости особо не мусорят). Нужно определить количество денег у всех заселившихся клиентов и количество денег, которое БУ заработает.

Входные данные: В первой строке файла находится число N – количество клиентов. Во второй строке находится число K – количество комнат на каждом этаже. В последующих строках записано по три числа: время прихода клиента, время ухода клиента и количество денег, которое у клиента на руках.

Запишите в ответ через пробел два числа: количество денег всех клиентов, оставшихся после бронирования квартиры и количество денег, которое заработает гостиница.

Вложения к задаче
Показать ответ и решение
file = open(’26_6.txt’)
count_client = int(file.readline())
count_rooms = int(file.readline())
array_client = list(list(map(int, i.split())) for i in file)
count_cash_client = 0
count_cash_BU = 0
array_client = sorted(array_client, key = lambda x: (x[0], -x[1]))
cash = 0
hotels = [[-1 for i in range(count_rooms)] for j in range(3)]
for start,end,money in array_client:
    if money >= 300:
        for i in range(len(hotels[2])):
            if start > hotels[2][i]:
                hotels[2][i] = end
                count_cash_BU += 300
                count_cash_client += money - 300
                break
    elif money >= 200:
        for i in range(len(hotels[1])):
            if start > hotels[1][i]:
                hotels[1][i] = end
                count_cash_BU += 200
                count_cash_client += money - 200
                break
    elif money >= 100:
        for i in range(len(hotels[0])):
            if start > hotels[0][i]:
                hotels[0][i] = end
                count_cash_BU += 100
                count_cash_client += money - 100
                break
print(count_cash_client,count_cash_BU)

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