26.06 Распределение объектов по местам (хранение багажа, парковки, кафе, гостиницы)
Готовиться с нами - ЛЕГКО!
Ошибка.
Попробуйте повторить позже
В магазине есть N камер хранения. Номера камер начинаются с 1. В магазин приходят покупатели и оставляют свои вещи в камерах хранениях. Покупатели приходят с вещами различных габаритов (маленький, средний, большой) и занимают камеру, подходящую под хранение вещи по её габаритам. Если камеры для хранения вещи подходящей по ее размерам нет, то покупатель уходит. Покупатель занимает одну из камер с минимальным номером. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю, а также категория размера вещи покупателя (A – маленькая, B – средняя, C – большая). Если осталась свободной только одна камера, а в один момент пришло несколько покупателей, то вещи в камеру положит клиент, у которого меньшее количество времени вещи будут находиться в камере.
Входные данные:В первой строке файла находится натуральное число K, не превышающее 1000, - количество покупателей. Во второй строке файла находится три натуральных числа N, M, V: N – количество камер хранения категории А, M – количество камер хранения категории B, V – количество камер хранения категории C. В последующих строках записано по два числа и букве, не превышающих 1500: время прибытия клиента, время ухода клиента, размер вещи покупателя.
Запишите в ответ два числа через пробел: количество покупателей, которые смогли положить вещи в камеру хранения, и категорию камеры, в которую положило вещей меньше всего клиентов.
Решение (Python)
file = open(’26_4__3cjwn.txt’) count_client = int(file.readline()) #количество клиентов cat_A, cat_B , cat_C = map(int,file.readline().split()) #считываем количество камер каждой категории cameras_A = [-1]*cat_A #инициализируем список камер типа А cameras_B = [-1]*cat_B #инициализируем список камер типа B cameras_C = [-1]*cat_C #инициализируем список камер типа C cameras = [cameras_A,cameras_B,cameras_C] #составляем список count_cameras = [0,0,0] count = 0 array_client = [] #заполняем список клиентов: время их прибытия, их ухода и категория вещи (A -- 0, B -- 1, C -- 2) for i in file: temp = i.split() # используем функцию ord для того чтобы буквы перевести в числа для дальнейшего удобного использования адресации к элементам в списках start,end,category = int(temp[0]),int(temp[1]),ord(temp[2]) % 65 array_client += [[start,end,category]] array_client = sorted(array_client) #сортируем по возрастанию for start,end,category in array_client: #проходимся по списку клиентов for i in range(len(cameras[category])): #проходимся по категории if start > cameras[category][i]: #если встречаем камеру, которая освободится к приходу клиента cameras[category][i] = end #присваиваем ей время ухода клиента count += 1 count_cameras[category] += 1 #прибавляем единицу к нужной категории break # прерываем цикл - переходим к следующему человеку print(count) # используем функцию chr для того чтобы получить букву категории, в которую положили меньше всего вещей print(chr(count_cameras.index(min(count_cameras)) + 65))
Ошибка.
Попробуйте повторить позже
В магазине есть N камер хранения. Номера камер начинаются с 1. В магазин приходят покупатели и оставляют свои вещи в камерах хранениях. Покупатели приходят с вещами различных габаритов (маленький, средний, большой) и занимают камеру, подходящую под хранение вещи по её габаритам. Если камеры для хранения вещи подходящей по ее размерам нет, то покупатель уходит. Освобождение камеры длится 4 минуты, которое начинается со следующей минуты после ухода покупателя. Покупатель занимает одну из камер с минимальным номером. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю, а также категория размера вещи покупателя (A – маленькая, B – средняя, C – большая). Если осталась свободной только одна камера, а в один момент пришло несколько покупателей, то вещи в камеру положит клиент, у которого меньшее количество времени вещи будут находиться в камере.
Входные данные: В первой строке файла находится натуральное число K, не превышающее 1000, – количество покупателей. Во второй строке файла находится три натуральных числа N, M, V: N – количество камер хранения категории А, M – количество камер хранения категории B, V – количество камер хранения категории C. В последующих строках записано по два числа и букве, не превышающих 1500: время прибытия клиента, время ухода клиента, размер вещи покупателя.
Запишите в ответ два числа через пробел: количество покупателей, которые смогли положить вещи в камеру хранения, и количество человек, которое положило вещи в камеру хранения категории A.
Решение (Python)
file = open(’26_4__3cjwn.txt’) count_client = int(file.readline()) # количество клиентов cat_A, cat_B, cat_C = map(int, file.readline().split()) # считываем количество камер каждой категории cameras_A = [-1] * cat_A # инициализируем список камер типа А cameras_B = [-1] * cat_B # инициализируем список камер типа B cameras_C = [-1] * cat_C # инициализируем список камер типа C cameras = [cameras_A, cameras_B, cameras_C] # составляем список count_cameras = [0, 0, 0] count = 0 array_client = [] # заполняем список клиентов: время их прибытия, их ухода и категория вещи (A -- 0, B -- 1, C -- 2) for i in file: temp = i.split() # используем функцию ord для того чтобы буквы перевести в числа для дальнейшего удобного использования адресации к элементам в списках start, end, category = int(temp[0]), int(temp[1]), ord(temp[2]) % 65 array_client += [[start, end, category]] array_client = sorted(array_client) # сортируем по возрастанию for start, end, category in array_client: # проходимся по списку клиентов for i in range(len(cameras[category])): # проходимся по категории if start > cameras[category][i]: # если встречаем камеру, которая освободится к приходу клиента cameras[category][i] = end + 4 # присваиваем ей время ухода клиента и время освобождения count += 1 count_cameras[category] += 1 break # прерываем цикл - переходим к следующему человеку # Вывод количества людей ,которое положили вещи в ячейки хранения и количества людей, которые положили вещи в ячейки категории А print(count, count_cameras[0])
Ошибка.
Попробуйте повторить позже
БУ ушёл из преподавания и вместо этого открыл свою гостиницу. Гостиница 3-этажная, на первом этаже квартиры стоят 100$, на втором – 200$, на третьем – 300$. К БУ в гостиницу приходят клиенты, известно о каждом клиенте во сколько он хочет заселиться, во сколько хочет уехать из гостиницы и сколько долларов у гостя с собой. БУ хочет максимальной прибыли, поэтому он заселяет гостей в лучшие квартиры, которые гости могут себе позволить. Если таких квартир нет, то БУ подбирает для гостя квартиру подешевле. Если в таком случае не нашлось свободной квартиры, то клиент уходит. Если несколько гостей пришло одновременно, то сначала заселяем того, у кого больше денег с собой. Следующий гость может занять комнату в следующую минуту после освобождения (да-да БУ моментально убирается в комнате и гости особо не мусорят). Нужно определить количество гостей, которое БУ заселит в квартиры и количество денег, которое БУ заработает.
Входные данные: В первой строке файла находится число N – количество клиентов. Во второй строке находится число K – количество комнат на каждом этаже. В последующих строках записано по три числа: время прихода клиента, время ухода клиента и количество денег, которое у клиента на руках.
Запишите в ответ через пробел два числа: количество клиентов, заселенных в гостиницу и количество денег, которое заработает гостиница.
Решение (Python)
file = open(’26_6__3ck46__3eqey.txt’) count_client = int(file.readline()) #количество клиентов count_rooms = int(file.readline()) # количество комнат на каждом этаже array_client = sorted(list(map(int, i.split())) for i in file) array_client = sorted(array_client, key=lambda x: (x[0], -x[2])) #сортируем список клиентв по возрастанию времени прихода и по убыванию количества денег у клиентов count = 0 cash = 0 #инициализуруем комнаты для каждого этажа hotel = [[-1 for i in range(count_rooms)] for j in range(3)] for start,end,money in array_client: # проход по клиента ok = False #флаг, заселили ли мы человека в комнату if money >= 300: # если у него более или равно 300 долларов for floor in range(2,-1,-1): # перебираем с третьего этажа до первого for i in range(len(hotel[floor])): # проход по комнатам текущего этажа if start > hotel[floor][i]: # если время прихода текущего человека больше чем время освобождения комнаты человеком, который занял данную комнату hotel[floor][i] = end # тогда записываем время ухода текущего клиента cash += (floor+1)*100 # подсчитываем прибыль с человека. +1 делаем так как счёт floor начинается с 0 и заканчивается 2 count += 1 # увеличиваем счётчик заселившихся клиентов ok = True # отмечаем, что нашли для человека комнату break if ok: # если для текущего человека была найдена квартира break # прерываем цикл - переходим к следующему клиенту elif money >= 200: # если у него более или равно 200 долларов for floor in range(1,-1,-1): # перебираем с второго этажа до первого for i in range(len(hotel[floor])): # проход по комнатам текущего этажа if start > hotel[floor][i]: # если время прихода текущего человека больше чем время освобождения комнаты человеком, который занял данную комнату hotel[floor][i] = end # тогда записываем время ухода текущего клиента cash += (floor+1)*100 # подсчитываем прибыль с человека. +1 делаем так как счёт floor начинается с 0 и заканчивается 2 count += 1 # увеличиваем счётчик заселившихся клиентов ok = True # отмечаем, что нашли для человека комнату break if ok: # прерываем цикл - переходим к следующему клиенту break # прерываем цикл - переходим к следующему клиенту elif money >= 100: # если у него более или равно 100 долларов for i in range(len(hotel[0])): # проход только по первому этажу if start > hotel[0][i]: # если время прихода текущего человека больше чем время освобождения комнаты человеком, который занял данную комнату hotel[0][i] = end # тогда записываем время ухода текущего клиента cash += 100 # подсчитываем прибыль count += 1 # увеличиваем счётчик заселившихся клиентов ok = True # отмечаем, что нашли для человека комнату break # прерываем цикл - переходим к следующему клиенту print(count,cash)
Ошибка.
Попробуйте повторить позже
БУ ушёл из преподавания и вместо этого открыл свою гостиницу. Гостиница 3-этажная, на первом этаже квартиры стоят 100$, на втором – 200$, на третьем – 300$. К БУ в гостиницу приходят клиенты, известно о каждом клиенте во сколько он хочет заселиться, во сколько хочет уехать из гостиницы и сколько долларов у гостя с собой. БУ хочет максимальной прибыли, поэтому он заселяет гостей в лучшие квартиры, которые гости могут себе позволить. Если таких квартир нет, то клиент уходит. Если несколько гостей пришло одновременно, то сначала заселяем того, кто заезжает на более длительный срок. Следующий гость может занять комнату в следующую минуту после освобождения (да-да БУ моментально убирается в комнате и гости особо не мусорят). Нужно определить количество денег у всех заселившихся клиентов и количество денег, которое БУ заработает.
Входные данные: В первой строке файла находится число N – количество клиентов. Во второй строке находится число K – количество комнат на каждом этаже. В последующих строках записано по три числа: время прихода клиента, время ухода клиента и количество денег, которое у клиента на руках.
Запишите в ответ через пробел два числа: количество денег всех клиентов, оставшихся после бронирования квартиры и количество денег, которое заработает гостиница.
Решение (Python)
file = open(’26_6__3ck46__3eqey.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])) #инициализуруем комнаты для каждого этажа hotels = [[-1 for i in range(count_rooms)] for j in range(3)] for start,end,money in array_client: # проход по клиентам if money >= 300: # если у него более или равно 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: # если у него более или равно 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: # если у него более или равно 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)
Ошибка.
Попробуйте повторить позже
В заведении M есть K столиков и C камер хранения. Клиенты приходят в заведение в определенный период и говорят во сколько они хотят покинуть заведение. Клиент остается и наслаждается проведенным временем, только в случае если он сел за столик и положил вещи в камеру хранения. Если одновременно пришло несколько людей, то сначала регистрируем того, кто меньше проведет в кафе. Следующий клиент может занять столик в следующую минуту после освобождения. Следующий клиент может занять камеру хранения в следующую минуту после освобождения. Освобождение стола длится 5 минут. Освобождение камеры хранения – 2 минуты. Освобождение камеры хранения и стола начинается в минуту ухода клиента. Нумерация столов и камер хранения начинается с 1. Нужно определить количество человек, которое забронирует и стол, и камеру хранения, а также номер столика, за который сядет последний клиент.
Входные данные: В первой строке записано первое число N – количество клиентов. Во второй строке записаны числа K – количество столиков в заведении и C – количество камер хранения. В последующих строках записано по два числа, не превышающих 1440: время прихода (время от начала суток) и время ухода.
Запишите через ответ два числа: количество клиентов, которое сели за стол и положили вещи в камеру хранения и номер столика, за который сядет последний клиент.
Решение (Python)
file = open(’26_7__3ck4h.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)
Ошибка.
Попробуйте повторить позже
В заведении M есть K столиков и C камер хранения. Клиенты приходят в заведение в определенный период, говорят в какой период времени хотят уйти, а также требуется ли клиенту камеру хранения (0 – не требуется, 1 – требуется). Клиент остается и наслаждается проведенным временем, только в случае если его условия выполнены. Если одновременно пришло несколько людей, то сначала регистрируем того, кто меньше проведет в кафе. Следующий клиент может занять столик в следующую минуту после освобождения. Следующий клиент может занять камеру хранения в следующую минуту после освобождения. Освобождение стола длится 3 минуты. Освобождение камеры хранения – 2 минуты. Освобождение камеры хранения и стола начинается в следующую минуту после ухода клиента. Нумерация столов и камер хранения начинается с 1. Нужно определить количество человек, которое останется в заведении, а также номер столика, за который сядет последний клиент.
Входные данные: В первой строке записано первое число N – количество клиентов. Во второй строке записаны числа K – количество столиков в заведении и C – количество камер хранения. В последующих строках записано по три числа, не превышающих 1440: время прихода (время от начала суток), время ухода и требуется ли клиенту камера хранения или нет.
Запишите через пробел в ответ два числа: количество клиентов, которое насладилось временем проведенным в заведении и номер столика, за который сядет последний клиент.
Решение (Python)
file = open(’26_8__3ck58.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)
Ошибка.
Попробуйте повторить позже
В магазине есть N камер хранения. Номера камер начинаются с 1. В магазин приходят покупатели и оставляют свои вещи в камерах хранениях. Покупатель занимает одну из камер с минимальным номером. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю. Если свободных камер нет, то покупатели уходят. Если один момент пришло несколько покупателей, то сначала вещи в камеру положит клиент, у которого большее количество времени вещи будут находиться в камере.
Входные данные: В первой строке файла находится натуральное число K - количество покупателей. Во второй строке файла находится натуральное число N– количество камер хранения в магазине. В последующих строках записано по два числа, не превышающих 1500: время прибытия клиента, время ухода клиента.
Запишите в ответ два числа через пробел: количество покупателей, которые смогли положить вещи в камеру хранения, и номер камеры, в которую положил вещи сотый покупатель.
Решение (Python)
file = open(’26_9__3ck5k.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)
Ошибка.
Попробуйте повторить позже
В заведении M есть K столиков и C камер хранения. Заведение работает с 6:00 до 21:00. Клиенты приходят в заведение в определенный период и говорят насколько они хотят забронировать столик и камеру хранения. Клиент остается и наслаждается проведенным временем, только в случае если он сел за столик и положил вещи в камеру хранения. Если одновременно пришло несколько людей, то сначала регистрируем того, кто меньше проведет в кафе. Следующий клиент может занять столик в следующую минуту после освобождения. Следующий клиент может занять камеру хранения в следующую минуту после освобождения. Освобождение стола длится 7 минут. Освобождение камеры хранения – 4 минуты. Освобождение камеры хранения и стола начинается в минуту ухода клиента. Нумерация столов и камер хранения начинается с 1. Нужно определить количество человек, которое забронирует и стол, и камеру хранения, а также номер столика, за который сядет последний клиент.
Входные данные: В первой строке записано первое число N – количество клиентов. Во второй строке записаны числа K – количество столиков в заведении и C – количество камер хранения. В последующих строках записано по два числа, не превышающих 1440: время прихода (время от начала суток) и время, на которое человек хочет забронировать столик и камеру хранения.
Запишите через ответ два числа: количество клиентов, которое сели за стол и положили вещи в камеру хранения и номер столика, за который сядет последний клиент.
Решение (Python)
file = open(’26_10__3ck64.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)
Ошибка.
Попробуйте повторить позже
В заведении M есть K столиков и C камер хранения. Заведение работает с 8:00 до 22:00. Клиенты приходят в заведение в определенный период, говорят на какой период времени хотят посетить заведение, а также требуется ли клиенту камеру хранения (0 – не требуется, 1 – требуется). Клиент остается и наслаждается проведенным временем, только в случае если его условия выполнены. Если одновременно пришло несколько людей, то сначала регистрируем того, кто больше проведет в кафе. Следующий клиент может занять столик в следующую минуту после освобождения. Следующий клиент может занять камеру хранения в следующую минуту после освобождения. Освобождение стола длится 6 минут. Освобождение камеры хранения – 2 минуты. Освобождение камеры хранения, стола начинается в следующую минуту после ухода клиента. Нумерация столов и камер хранения начинается с 1. Нужно определить количество человек, которое останется в заведении, а также номер столика, за который сядет последний клиент.
Входные данные: В первой строке записано первое число N – количество клиентов. Во второй строке записаны числа K – количество столиков в заведении и C – количество камер хранения. В последующих строках записано по три неотрицательных числа: время прихода (время от начала суток), время, на которое человек хочет посетить заведение и нужна ли камера хранения клиенту или нет.
Запишите через пробел в ответ два числа: количество клиентов, которое останется в заведении и номер столика, за который сядет последний клиент.
Решение (Python)
file = open(’26_11__3ck6k.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)
Ошибка.
Попробуйте повторить позже
В магазине есть N камер хранения. В магазин приходят покупатели и оставляют свои вещи в камерах хранениях. Покупатель занимает одну из камер с минимальным номером. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Освобождение камеры длится 5 минут. Освобождение камеры начинается на следующую минуту после ухода клиента. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю. Если свободных камер нет, то покупатели уходят. Если в один момент пришло несколько покупателей, то сначала вещи в камеру положит клиент, у которого большое количество времени вещи будут находиться в камере.
Входные данные: В первой строке файла находится натуральное число K – количество покупателей. Во второй строке файла находится натуральное число N – количество камер хранения в магазине. В последующих строках записано по два числа, не превышающих 1500: время прибытия клиента, время ухода клиента.
Запишите в ответ два числа через пробел: количество покупателей, которые смогли положить вещи в камеру хранения, и суммарное время всех покупателей, при котором вещь будет в камере.
Решение (Python)
file = open(’26_9__3ck5k.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)
Ошибка.
Попробуйте повторить позже
В магазине есть N камер хранения. Номера камер начинаются с 1. В магазин приходят покупатели и оставляют свои вещи в камерах хранениях. Покупатели приходят с вещами различных габаритов (маленький, средний, большой) и занимают камеру, подходящую под хранение вещи по её габаритам. Если камеры для хранения вещи подходящей по ее размерам нет, то покупатель может положить свою вещь в камеру предназначенной для более габаритных вещей. Покупатель занимает одну из камер с минимальным номером. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Освобождение камеры длится 4 минуты и начинается в минуту ухода покупателя. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю, а также категория размера вещи покупателя (A – маленькая, B – средняя, C – большая). Если в один момент пришло несколько покупателей, то вещи в камеру положит клиент, у которого большее количество времени вещи будут находиться в камере.
Входные данные: В первой строке файла находится натуральное число K, не превышающее 1000, - количество покупателей. Во второй строке файла находится три натуральных числа N, M, V: N – количество камер хранения категории А, M – количество камер хранения категории B, V – количество камер хранения категории C. В последующих строках записано по два числа и букве, не превышающих 1500: время прибытия клиента, время ухода клиента, размер вещи покупателя.
Запишите в ответ два числа через пробел: количество покупателей, которые смогли положить вещи в камеру хранения, и категорию камеры, в которую положило вещей больше всего клиентов.
Решение (Python)
file = open(’26_12__3ck7g.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() # используем функцию ord для того чтобы буквы перевести в числа для дальнейшего удобного использования адресации к элементам в списках 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))
Ошибка.
Попробуйте повторить позже
В магазине есть N камер хранения. Номера камер начинаются с 1. В магазин приходят покупатели и оставляют свои вещи в камерах хранениях. Покупатели приходят с вещами различных габаритов (маленький, средний, большой) и занимают камеру, подходящую под хранение вещи по её габаритам. Если камеры для хранения вещи подходящей по ее размерам нет, то покупатель уходит. Покупатель занимает одну из камер с минимальным номером. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Освобождение камеры длится 6 минут и начинается на следующую минуту после ухода клиента. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю, а также категория размера вещи покупателя (A – маленькая, B – средняя, C – большая). Если в один момент пришло несколько покупателей, то вещи в камеру положит клиент, у которого большее количество времени вещи будут находиться в камере.
Входные данные: В первой строке файла находится натуральное число K, не превышающее 1000, - количество покупателей. Во второй строке файла находится три натуральных числа N, M, V: N – количество камер хранения категории А, M – количество камер хранения категории B, V – количество камер хранения категории C. В последующих строках записано по два числа и букве, не превышающих 1500: время прибытия клиента, время ухода клиента, размер вещи покупателя.
Запишите в ответ два числа через пробел: количество покупателей, которые смогли положить вещи в камеру хранения, и разницу в количестве людей между категориями куда положило максимальное количество людей и минимальное количество людей.
Решение (Python)
file = open(’26_12__3ck7g.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() # используем функцию ord для того чтобы буквы перевести в числа для дальнейшего удобного использования адресации к элементам в списках 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))
Ошибка.
Попробуйте повторить позже
В прачечной есть K стиральных машин, которые пронумерованы с 1. Принимаемые вещи кладутся в свободную стиральную машину с минимальным номером. Известно время, когда пассажиры сдают и забирают вещи (в минутах с начала суток). Среди стиральных машин есть супер-стиральные машины, они стирают вещи в два раза быстрее. У таких машин номер кратен 5. Если время стирки было нечётным, то оно округляется в меньшую сторону. Стиралка доступна для вещей, начиная со следующей минуты, после окончания срока хранения. Если свободных машинок не находится, то вещи не принимаются в стиральную машину. Если в один момент пришло несколько клиентов, то в первую очередь, вещи принимаются у того, чья стирка займет меньшее время.
Найдите количество вещей, которое будет сдано в стиральные машины за 24 часа и номер стиралки, в которую сдаст вещи последний клиент. Входные данные В первой строке входного файла находится число K – количество стиральных машин, во второй строке файла число N – количество клиентов, сдающих свои вещи (натуральное число, не превышающее 1000). Каждая из следующих N строк содержит два натуральных числа, не превышающих 1440: время сдачи вещей и время выдачи вещей.
Выходные данные
Программа должна вывести два числа через пробел: количество сданных в стиральные машины вещей и номер стиралки, в которую примут вещи у последнего клиента, который сможет сдать вещи.
Решение (Python)
file = open(’R1_26__3vnm4.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)
Ошибка.
Попробуйте повторить позже
В прачечной есть K стиральных машин, которые пронумерованы с 1. Принимаемые вещи кладутся в свободную стиральную машину с минимальным номером. Известно время, когда клиенты сдают и забирают вещи (в минутах с начала суток). Среди стиральных машин есть супер-стиральные машины, они стирают вещи в два раза быстрее. У таких машин номер кратен 3. Если время стирки было нечётным, то оно округляется в меньшую сторону. Стиралка доступна для вещей, начиная со следующей минуты, после окончания срока хранения. Если свободных машинок не находится, то вещи не принимаются в стиральную машину. Если в один момент пришло несколько клиентов, то в первую очередь, вещи принимаются у того, чья стирка займет большее время.
Найдите количество вещей, которое будет сдано в стиральные машины за 24 часа и номер стиралки, в которую сдаст вещи последний клиент.
Входные данные:
В первой строке входного файла находится число K – количество стиральных машин, во второй строке файла число N – количество клиентов, сдающих свои вещи (натуральное число, не превышающее 1000). Каждая из следующих N строк содержит два натуральных числа, не превышающих 1440: время сдачи вещей и время выдачи вещей.
Выходные данные:
Программа должна вывести два числа через пробел: количество сданных в стиральные машины вещей и номер стиралки, в которую примут вещи у последнего клиента, который сможет сдать вещи.
Решение (Python)
file = open(’R1_26__3vnm4.txt’) count_machines = int(file.readline()) # количество стиральных машин count_client = int(file.readline()) # количество клиентов array_client = list(list(map(int,i.split())) for i in file) # cортируем список клиентов по возрастанию времени прихода и по убыванию времени ухода 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)
Ошибка.
Попробуйте повторить позже
В магазине есть N камер хранения. Номера камер начинаются с 1. В магазин приходят покупатели и оставляют свои вещи в камерах хранениях. Покупатель занимает одну из камер с минимальным номером. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю. Если свободных камер нет, то покупатели уходят. Если в один момент пришло несколько покупателей, то сначала вещи в камеру положит клиент, у которого большее количество времени вещи будут находиться в камере.
Входные данные: В первой строке файла находится натуральное число K - количество покупателей. Во второй строке файла находится натуральное число N– количество камер хранения в магазине. В последующих строках записано по два числа, не превышающих 1500: время прибытия клиента, время ухода клиента.
Запишите в ответ два числа через пробел: количество покупателей, которые смогли положить вещи в камеру хранения, и минуту, в которую впервые были заняты все камеры одновременно.
Решение (Python)
file = open(’R2_26__3vnm7.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)))
Ошибка.
Попробуйте повторить позже
В магазине есть N камер хранения. Номера камер начинаются с 1. В магазин приходят покупатели и оставляют свои вещи в камерах хранениях. Покупатель занимает одну из камер с минимальным номером. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю. Если свободных камер нет, то покупатели уходят. Если в один момент пришло несколько покупателей, то сначала вещи в камеру положит клиент, у которого меньшее количество времени вещи будут находиться в камере.
Входные данные: В первой строке файла находится натуральное число K - количество покупателей. Во второй строке файла находится натуральное число N– количество камер хранения в магазине. В последующих строках записано по два числа, не превышающих 1500: время прибытия клиента, время ухода клиента.
Запишите в ответ два числа через пробел: количество покупателей, которые смогли положить вещи в камеру хранения, и количество минут, в которые были заняты все камеры одновременно.
Решение (Python)
file = open(’R2_26__3vnm7.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]))
Ошибка.
Попробуйте повторить позже
В магазине есть N камер хранения. Номера камер начинаются с 1. В магазин приходят покупатели и оставляют свои вещи в камерах хранениях. Покупатель занимает одну из камер с минимальным номером. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю. Если свободных камер нет, то покупатели уходят. Если осталась свободной только одна камера, а в один момент пришло несколько покупателей, то вещи в камеру положит клиент, у которого меньшее количество времени вещи будут находиться в камере.
Входные данные: В первой строке файла находится натуральное число K, не превышающее 1000, – количество покупателей. Во второй строке файла находится натуральное число N, не превышающее 1000 – количество камер хранения в магазине. В последующих строках записано по два числа, не превышающих 1500: время прибытия клиента, время ухода клиента.
Запишите в ответ два числа через пробел: номер камеры, в которую смогли положить вещи наибольшее количество людей, если таких камер оказалось несколько, то укажите номер первой такой камеры, и номер камеры, в которую положил вещи покупатель, у которого вещи будут находиться в камере наибольшее время.
Решение (Python)
file = open(’R3_26__3vnma.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 # прибавляем 1 к количеству той камеры, в которую положили вещи visitors.append((end-start,i+1)) # добавляем время пребывания вещи в камере и номер камеры хранения break # прерываем цикл - переходим к следующему человеку # вывод номера камеры, в которую положили больше всего людей print(count.index(max(count))+1) # сортируем по убыванию список посетителей visitors = sorted(visitors,reverse=True) # вывод номера камеры, в которой лежала вещь покупателя наибольшее время print(visitors[0][1])
Ошибка.
Попробуйте повторить позже
В магазине есть N камер хранения. Номера камер начинаются с 1. В магазин приходят покупатели и оставляют свои вещи в камерах хранениях. Покупатель занимает одну из камер с минимальным номером. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю. Если свободных камер нет, то покупатели уходят. Если в один момент пришло несколько покупателей, то вещи в камеру положит клиент, у которого большее количество времени вещи будут находиться в камере.
Входные данные: В первой строке файла находится натуральное число K, не превышающее 1000, – количество покупателей. Во второй строке файла находится натуральное число N, не превышающее 1000 – количество камер хранения в магазине. В последующих строках записано по два числа, не превышающих 1500: время прибытия клиента, время ухода клиента.
Запишите в ответ два числа через пробел: количество человек, которые смогли положить вещи в камеру и номер камеры, в которую положил вещи предпоследний клиент.
Решение (Python)
file = open(’R3_26__3vnma.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])
Ошибка.
Попробуйте повторить позже
В магазине есть N камер хранения. Номера камер начинаются с 1. В магазин приходят покупатели и оставляют свои вещи в камерах хранениях. Покупатель занимает одну из камер с минимальным номером. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю. Если свободных камер нет, то покупатели уходят. Если осталась свободной только одна камера, а в один момент пришло несколько покупателей, то вещи в камеру положит клиент, у которого меньшее количество времени вещи будут находиться в камере.
Входные данные: В первой строке файла находится натуральное число K, не превышающее 1000, – количество камер хранения. Во второй строке файла находится натуральное число N, не превышающее 1000 – количество покупателей. В последующих строках записано по два числа, не превышающих 1500: время прибытия клиента, время ухода клиента.
Запишите в ответ два числа через пробел: номер камеры, в которую положило вещи меньше всего людей, если таких камер несколько, то нужно взять номер первой такой камеры, и время ухода клиента, после которого никто больше не займет камеру, в которую за всё время работы положило вещи больше всего клиентов.
Решение (Python)
file = open(’R4_26__3vnmf.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 # прибавляем 1 к количеству той камеры, в которую положили вещи break # прерываем цикл - переходим к следующему человеку # вывод номера камера, в которую положили меньше всего вещей print(count.index(min(count))+1) # вывод времени ухода клиента, после которого никто не займет камеру, в которую больше всего людей положили вещи print(cameras[count.index(max(count))])
Ошибка.
Попробуйте повторить позже
В магазине есть N камер хранения. В магазин приходят покупатели и оставляют свои вещи в камерах хранения. Покупатель занимает одну из камер с минимальным номером. Нумерация камер начинается с 1. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю. Если свободных камер нет, то покупатели уходят. Если в один момент пришло несколько покупателей, то сначала вещи в камеру положит клиент, у которого меньшее количество времени вещи будут находиться в камере.
Входные данные: В первой строке файла находится натуральное число K – количество покупателей. Во второй строке файла находится натуральное число N – количество камер хранения в магазине. В последующих строках записано по два числа, не превышающих 1500: время прибытия клиента, время ухода клиента.
Запишите в ответ два числа через пробел: общее количество покупателей, которые смогли положить вещи в камеры хранения с чётным номером, и номер камеры, в которую положил вещи последний покупатель.
Решение (Python)
file = open(’26_L1__3yqpm.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 # прибавляем 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)