26.06 Распределение объектов по местам (хранение багажа, парковки, кафе, гостиницы)
Ошибка.
Попробуйте повторить позже
Задание выполняется с использованием прилагаемых файлов.
В аэропорту расположены камеры хранения, состоящие из ячеек. Ячейки камер хранения пронумерованы, начиная с . Пассажиры сдают багаж в эти ячейки. Багаж кладётся в свободную ячейку с минимальным номером. Известно время размещения багажа в камеру хранения и время освобождения ячейки в камере хранения (в минутах с начала суток). Багаж достаётся из ячейки в течение минуты. Начиная со следующей минуты, в ячейку можно положить другой багаж. Если все ячейки заняты, то багаж сдать нельзя.
Входные данные:
В первой строке подается — число ячеек в камере хранения и — число пассажиров. На каждой из следующих строк записаны числа: время размещения багажа в камере хранения и время освобождения ячейки в камере хранения.
Определите, какое количество багажей сдали в течение суток и номер ячейки, в которую положили последний сданный багаж.
Выходные данные:
В ответ через пробел запишите два числа: количество багажей, которые сдали в ячейки хранения и номер ячейки, в которую положили последний сданный багаж. Пример входных данных:
Для указанных входных данных ответом будет
Решение (Python)
f = open("26-2__2yr4z.txt") # Считываем количество ячеек в камере хранения (K) и количество пассажиров (N) k, n = map(int, f.readline().split()) # Создаем список для хранения времени сдачи и выдачи багажа каждого пассажира # и считываем эти данные из файла, разделяя каждую строку на два числа a = [] for i in range(n): start, finish = map(int, f.readline().split()) a.append((start, finish)) # Инициализируем переменные для подсчета количества сданных багажей # и для хранения номера последней занятой ячей counter = 0 m = -1 # Создаем список для хранения состояния каждой ячейки (занята/свободна) storage = [-1] * k # Сортируем список пассажиров по времени сдачи багажа a.sort() # Проходим по каждому пассажиру for i in range(n): start = a[i][0] finish = a[i][1] # Проходим по каждой ячейке в камере хранения for j in range(k): # Если время сдачи багажа текущего пассажира больше времени освобождения ячейки if start > storage[j]: # Занимаем текущую ячейку багажом пассажира storage[j] = finish # Увеличиваем счетчик сданных багажей counter += 1 # Обновляем номер последней занятой ячейки m = j + 1 # Прерываем внутренний цикл, чтобы перейти к следующему пассажиру break # Выводим количество сданных багажей и номер последней занятой ячейки print(counter, m)
Ошибка.
Попробуйте повторить позже
В аэропорту есть камера хранения из ячеек, которые пронумерованы с 1. Принимаемый багаж кладется в свободную ячейку с минимальным номером. Известно время, когда пассажиры сдают и забирают багаж (в минутах с начала суток). Ячейка доступна для багажа, начиная со следующей минуты, после окончания срока хранения. Если свободных ячеек не находится, то багаж не принимается в камеру хранения. Если 2 пассажира одновременно приходят сдавать багаж, то в раньше ячейку багаж кладет тот, кто раньше забирает.
Найдите количество багажей, которое будет сдано в камеры за 24 часа и наибольший номер ячейки, в которую сдаст багаж последний пассажир.
В первой строке входного файла находится число – количество ячеек в камере хранения, во второй строке файла число – количество пассажиров, сдающих багаж (натуральное число, не превышающее 1000). Каждая из следующих строк содержит два натуральных числа, не превышающих 1440: время сдачи багажа и время выдачи багажа.
Программа должна вывести два числа через пробел: количество сданных в камеру хранения багажей и наибольший номер ячейки, в которую примут багаж у последнего пассажира, который сможет сдать багаж.
Типовой пример организации данных:
2
4
30 1000
60 100
61 1100
1010 1440
Для указанного примера багаж смогут сдать первый, второй и четвёртый пассажир. Последний пассажир сдаст свой багаж в ячейку один, так как к этому моменту первая и вторая ячейка будут свободны.
Числа в ответе запишите через пробел.
Решение (Python)
f = open(’26.txt’) # Считываем количество ячеек в камере хранения (K) и количество пассажиров (N) k = int(f.readline()) n = int(f.readline()) # Создаем список для хранения времени сдачи и выдачи багажа каждого пассажира # и считываем эти данные из файла, разделяя каждую строку на два числа a = [list(map(int, i.split())) for i in f] # Сортируем список пассажиров по времени сдачи багажа a.sort() # Создаем список для хранения состояния каждой ячейки (занята/свободна) s = [-1]*k # Инициализируем переменные для подсчета количества сданных багажей # и для хранения номера последней занятой ячей count = last = 0 # Проходим по каждому пассажиру for i in range(n): # Проходим по каждой ячейке в камере хранения for j in range(len(s)): # Если время сдачи багажа текущего пассажира больше времени освобождения ячейки if a[i][0] > s[j]: # Увеличиваем счетчик сданных багажей count += 1 # Занимаем текущую ячейку багажом пассажира s[j] = a[i][1] # Обновляем номер последней занятой ячейки last = j + 1 # Прерываем внутренний цикл, чтобы перейти к следующему пассажиру break # Выводим количество сданных багажей и номер последней занятой ячейки print(count, last)
Ошибка.
Попробуйте повторить позже
Досрочная волна 2023
В аэропорту есть камера хранения из K ячеек, которые пронумерованы с . Принимаемый багаж кладется в свободную ячейку с минимальным номером. Известно время, когда пассажиры сдают и забирают багаж (в минутах с начала суток). Ячейка доступна для багажа, начиная со следующей минуты, после окончания срока хранения. Если свободных ячеек не находится, то багаж не принимается в камеру хранения.
Найдите количество багажа, которое будет сдано в камеры за часа и номер ячейки, в которую сдаст багаж последний пассажир.
Входные данные
В первой строке входного файла находится число – количество ячеек в камере хранения, во второй строке файла число – количество пассажиров, сдающих багаж (натуральное число, не превышающее ). Каждая из следующих N строк содержит два натуральных числа, не превышающих : время сдачи багажа и время выдачи багажа.
Выходные данные
Программа должна вывести два числа через пробел: количество сданных в камеру хранения багажа и номер ячейки, в которую примут багаж у последнего пассажира, который сможет сдать багаж.
Типовой пример организации данных:
Для указанного примера багаж смогут сдать первый, второй, четвёртый и пятый пассажир. Последний пассажир сдаст свой багаж в ячейку один, так как к этому моменту первая и вторая ячейка будут свободны.
Решение (Python)
f = open(’26__1uvv8.txt’) # Считываем количество ячеек в камере хранения (K) и количество пассажиров (N) k = int(f.readline()) n = int(f.readline()) # Создаем список для хранения времени сдачи и выдачи багажа каждого пассажира # и считываем эти данные из файла, разделяя каждую строку на два числа a = [list(map(int, i.split())) for i in f] # Сортируем список пассажиров по времени сдачи багажа a.sort() # Создаем список для хранения состояния каждой ячейки (занята/свободна) s = [-1]*k # Инициализируем переменные для подсчета количества сданных багажей # и для хранения номера последней занятой ячей count = last = 0 # Проходим по каждому пассажиру for i in range(n): # Проходим по каждой ячейке в камере хранения for j in range(len(s)): # Если время сдачи багажа текущего пассажира больше времени освобождения ячейки if a[i][0] > s[j]: # Увеличиваем счетчик сданных багажей count += 1 # Занимаем текущую ячейку багажом пассажира s[j] = a[i][1] # Обновляем номер последней занятой ячейки last = j + 1 # Прерываем внутренний цикл, чтобы перейти к следующему пассажиру break # Выводим количество сданных багажей и номер последней занятой ячейки print(count, last)
Ошибка.
Попробуйте повторить позже
Досрочная волна 2023
В аэропорту есть камера хранения из K ячеек, которые пронумерованы с . Принимаемый багаж кладется в свободную ячейку с минимальным номером. Известно время, когда пассажиры сдают и забирают багаж (в минутах с начала суток). Ячейка доступна для багажа, начиная со следующей минуты, после окончания срока хранения. Если свободных ячеек не находится, то багаж не принимается в камеру хранения.
Найдите количество багажа, которое будет сдано в камеры за часа и номер ячейки, в которую сдаст багаж последний пассажир.
Входные данные
В первой строке входного файла находится число – количество ячеек в камере хранения, во второй строке файла число – количество пассажиров, сдающих багаж (натуральное число, не превышающее ). Каждая из следующих N строк содержит два натуральных числа, не превышающих : время сдачи багажа и время выдачи багажа.
Выходные данные
Программа должна вывести два числа через пробел: количество сданных в камеру хранения багажа и номер ячейки, в которую примут багаж у последнего пассажира, который сможет сдать багаж.
Типовой пример организации данных:
Для указанного примера багаж смогут сдать первый, второй, четвёртый и пятый пассажир. Последний пассажир сдаст свой багаж в ячейку один, так как к этому моменту первая и вторая ячейка будут свободны.
Решение (Python)
f = open(’26__2y9ji.txt’) # Считываем количество ячеек в камере хранения (K) и количество пассажиров (N) k = int(f.readline()) n = int(f.readline()) # Создаем список для хранения времени сдачи и выдачи багажа каждого пассажира # и считываем эти данные из файла, разделяя каждую строку на два числа a = [list(map(int, i.split())) for i in f] # Сортируем список пассажиров по времени сдачи багажа a.sort() # Создаем список для хранения состояния каждой ячейки (занята/свободна) s = [-1]*k # Инициализируем переменные для подсчета количества сданных багажей # и для хранения номера последней занятой ячей count = last = 0 # Проходим по каждому пассажиру for i in range(n): # Проходим по каждой ячейке в камере хранения for j in range(len(s)): # Если время сдачи багажа текущего пассажира больше времени освобождения ячейки if a[i][0] > s[j]: # Увеличиваем счетчик сданных багажей count += 1 # Занимаем текущую ячейку багажом пассажира s[j] = a[i][1] # Обновляем номер последней занятой ячейки last = j + 1 # Прерываем внутренний цикл, чтобы перейти к следующему пассажиру break # Выводим количество сданных багажей и номер последней занятой ячейки print(count, last)
Ошибка.
Попробуйте повторить позже
Статград 25.04.23
На парковке имеется мест для легковых автомобилей и мест для микроавтобусов. Приезжающий на парковку автомобиль занимает любое свободное место соответствующего типа. При этом если свободных мест для легковых автомобилей нет, то легковой автомобиль занимает свободное место, предназначенное для микроавтобуса, но микроавтобус не может занять место, предназначенное для легкового автомобиля. Если подходящего места нет, автомобиль уезжает.
Входные данные Первая строка входного файла содержит целое число – общее количество автомобилей, в течение суток приехавших на парковку. Каждая из следующих строк описывает один автомобиль и содержит целых числа и букву. Первое число означает время в минутах с начала суток, когда автомобиль прибыл на парковку, второе – необходимую длительность стоянки в минутах. Буква означает тип автомобиля: A – легковой, B – микроавтобус.
Гарантируется, что никакие два автомобиля не приезжают одновременно. Если время прибытия автомобиля совпадает со временем окончания стоянки другого автомобиля, вновь прибывший автомобиль может занять освободившееся место, если оно подходит ему по типу.
Выходные данные
В ответе запишите два целых числа через пробел: сначала количество легковых автомобилей, которые смогут припарковаться, затем – общее количество автомобилей (как легковых, так и микроавтобусов), которые уедут из-за отсутствия мест.
Решение (Python)
file = open(’26__1ux52.txt’) # считываем количество машин в файле count_cars = int(file.readline()) cars = [] # список, в котором будут записаны машины for i in range(count_cars): start,duration,type = file.readline().split() # считываем текущую строку start,duration = int(start),int(duration) # переводим в число время приезда и длительность парковки # используем функцию ord для перевода буквы в число. А станет 0, а В станет 1. Это сделано для удобства дальнейшего обращения со списком type = ord(type) % 65 cars.append([start,duration,type]) # добавляем запись о машине в список cars.sort() # сортируем список # симулируем парковку, 80 мест для легковых, 20 - для микроавтобусов parking = [[-1 for i in range(80)],[-1 for i in range(20)]] all_cars_count = 0 # количество припаркованных машин любого вида count_cars_A = 0 # количество припаркованных легковых машин for start,duration,category in cars: # перебор машин в списке # флаг, который показывает нашли мы ли место для парковки для текущей машины или нет. # Это сделано, с той целью, чтобы позже сбросить циклы перебора категории и перебор парковочных мест определенной категории. ok = False # перебираем категорию для парковочного места for categ in range(category,2): # перебираем парковочные места определенной категории for i in range(len(parking[categ])): # если время приезда текущей машины совпадает или больше времени уезда той, что уже припаркована на данном парковочном месте if start >= parking[categ][i]: parking[categ][i] = start + duration # то припарковываем текущую машину на это парковочное место all_cars_count += 1 # увеличиваем количество припаркованных машин любого вида if category == 0: # если текущая машина - легковая count_cars_A += 1 # то увеличиваем счётчик припаркованных легковых машин ok = True # отмечаем, что машину припарковали break # сбрасываем цикл, переходим к следующей категории if ok: # если текущую машину припарковали break # то сбрасываем цикл, чтобы перейти к следующей машине # Вывод количества припаркованных легковых машин и количества не припаркованных машин любого вида print(count_cars_A,count_cars - all_cars_count)
Ошибка.
Попробуйте повторить позже
Статград 25.04.23
На парковке имеется мест для легковых автомобилей и мест для микроавтобусов. Приезжающий на парковку автомобиль занимает любое свободное место соответствующего типа. При этом если свободных мест для легковых автомобилей нет, то легковой автомобиль занимает свободное место, предназначенное для микроавтобуса, но микроавтобус не может занять место, предназначенное для легкового автомобиля. Если подходящего места нет, автомобиль уезжает.
Входные данные Первая строка входного файла содержит целое число – общее количество автомобилей, в течение суток приехавших на парковку. Каждая из следующих строк описывает один автомобиль и содержит целых числа и букву. Первое число означает время в минутах с начала суток, когда автомобиль прибыл на парковку, второе – необходимую длительность стоянки в минутах. Буква означает тип автомобиля: A – легковой, B – микроавтобус.
Гарантируется, что никакие два автомобиля не приезжают одновременно. Если время прибытия автомобиля совпадает со временем окончания стоянки другого автомобиля, вновь прибывший автомобиль может занять освободившееся место, если оно подходит ему по типу.
Выходные данные
В ответе запишите два целых числа: сначала количество легковых автомобилей, которые смогут припарковаться, затем – общее количество автомобилей (как легковых, так и микроавтобусов), которые уедут из-за отсутствия мест.
Решение (Python)
file = open(’26__1ux58.txt’) # считываем количество машин в файле count_cars = int(file.readline()) cars = [] # список, в котором будут записаны машины for i in range(count_cars): start,duration,type = file.readline().split() # считываем текущую строку start,duration = int(start),int(duration) # переводим в число время приезда и длительность парковки # используем функцию ord для перевода буквы в число. А станет 0, а В станет 1. Это сделано для удобства дальнейшего обращения со списком type = ord(type) % 65 cars.append([start,duration,type]) # добавляем запись о машине в список cars.sort() # сортируем список # симулируем парковку, 80 мест для легковых, 20 - для микроавтобусов parking = [[-1 for i in range(80)],[-1 for i in range(20)]] all_cars_count = 0 # количество припаркованных машин любого вида count_cars_A = 0 # количество припаркованных легковых машин for start,duration,category in cars: # перебор машин в списке # флаг, который показывает нашли мы ли место для парковки для текущей машины или нет. # Это сделано, с той целью, чтобы позже сбросить циклы перебора категории и перебор парковочных мест определенной категории. ok = False # перебираем категорию для парковочного места for categ in range(category,2): # перебираем парковочные места определенной категории for i in range(len(parking[categ])): # если время приезда текущей машины совпадает или больше времени уезда той, что уже припаркована на данном парковочном месте if start >= parking[categ][i]: parking[categ][i] = start + duration # то припарковываем текущую машину на это парковочное место all_cars_count += 1 # увеличиваем количество припаркованных машин любого вида if category == 0: # если текущая машина - легковая count_cars_A += 1 # то увеличиваем счётчик припаркованных легковых машин ok = True # отмечаем, что машину припарковали break # сбрасываем цикл, переходим к следующей категории if ok: # если текущую машину припарковали break # то сбрасываем цикл, чтобы перейти к следующей машине # Вывод количества припаркованных легковых машин и количества не припаркованных машин любого вида print(count_cars_A,count_cars - all_cars_count)
Ошибка.
Попробуйте повторить позже
Автостоянка имеет 180 мест для легковых автомобилей и 20 мест для автобусов. Когда автомобиль приезжает на стоянку, он занимает любое свободное место соответствующего типа. При этом если свободных мест для легковых автомобилей нет, то легковой автомобиль занимает свободное место, предназначенное для автобуса, но автобус не может занять место, предназначенное для легкового автомобиля. Если подходящего места нет, автомобиль уезжает.
Входные данные.
Первая строка входного файла содержит целое число N – общее количество автомобилей, в течение суток приехавших на стоянку. Каждая из следующих N строк описывает один автомобиль и содержит 2 целых числа и букву. Первое число означает время в минутах с начала суток, когда автомобиль прибыл на стоянку, второе – необходимую длительность стоянки в минутах. Буква означает тип автомобиля: A – легковой, B – автобус. Гарантируется, что никакие два автомобиля не приезжают одновременно. Если время прибытия автомобиля совпадает со временем окончания стоянки другого автомобиля, вновь прибывший автомобиль может занять освободившееся место, если оно подходит ему по типу.
В ответе запишите два целых числа через пробел: сначала количество автобусов, которые смогут припарковаться, затем – общее количество автомобилей (как легковых, так и автобусов), которые уедут из-за отсутствия мест.
Решение (Python)
file = open(’26_1__1vn98.txt’) # считываем количество машин в файле count_cars = int(file.readline()) cars = [] # список, в котором будут записаны машины for i in range(count_cars): start,duration,type = file.readline().split() # считываем текущую строку start,duration = int(start),int(duration) # переводим в число время приезда и длительность парковки # используем функцию ord для перевода буквы в число. А станет 0, а В станет 1. Это сделано для удобства дальнейшего обращения со списком type = ord(type) % 65 cars.append([start,duration,type]) # добавляем запись о машине в список cars.sort() # сортируем список # симулируем парковку, 80 мест для легковых, 20 - для микроавтобусов parking = [[-1 for i in range(180)],[-1 for i in range(20)]] all_cars_count = 0 # количество припаркованных машин любого вида count_cars_B = 0 # количество припаркованных автобусов for start,duration,category in cars: # перебор машин в списке # флаг, который показывает нашли мы ли место для парковки для текущей машины или нет. # Это сделано, с той целью, чтобы позже сбросить циклы перебора категории и перебор парковочных мест определенной категории. ok = False # перебираем категорию для парковочного места for categ in range(category,2): # перебираем парковочные места определенной категории for i in range(len(parking[categ])): # если время приезда текущей машины совпадает или больше времени уезда той, что уже припаркована на данном парковочном месте if start >= parking[categ][i]: parking[categ][i] = start + duration # то припарковываем текущую машину на это парковочное место all_cars_count += 1 # увеличиваем количество припаркованных машин любого вида if category == 1: # если текущая машина - автобус count_cars_B += 1 # то увеличиваем счётчик припаркованных автобусов ok = True # отмечаем, что машину припарковали break # сбрасываем цикл, переходим к следующей категории if ok: # если текущую машину припарковали break # то сбрасываем цикл, чтобы перейти к следующей машине # Вывод количества припаркованных автобусов и количества не припаркованных машин любого вида print(count_cars_B,count_cars - all_cars_count)
Ошибка.
Попробуйте повторить позже
На парковке есть D мест для легковых автомобилей и E мест для автобусов. Приезжающий на парковку автомобиль занимает любое подходящее свободное место, при этом легковой автомобиль может встать на свободное место, предназначенное для автобуса, но автобус не может занять место, предназначенное для легкового автомобиля. Если подходящего свободного места нет, автомобиль уезжает. Если два автомобиля приезжают одновременно, при этом занять место может только один из них, занимает тот, который будет стоять меньше по времени. Если время прибытия автомобиля совпадает со временем окончания стоянки другого автомобиля, вновь прибывший автомобиль может занять освободившееся место, если оно подходит ему по типу.
Определите количество автобусов, которые смогут припарковаться, и общее количество автомобилей (как легковых, так и автобусов), которые уедут из-за отсутствия мест.
Входные данные. Первая строка файла содержит три целых числа: C – общее количество автомобилей, приехавших на парковку в течение суток; D – количество мест для легковых автомобилей и E – количество мест для автобусов. Каждая из следующих C строк описывает один автомобиль и содержит два целых числа и букву. Первое число означает время в минутах с начала суток, когда автомобиль прибыл на парковку, второе – необходимую длительность стоянки в минутах. Буква означает тип автомобиля: A – легковой, B – микроавтобус.
В ответе запишите два целых числа через пробел: сначала количество автобусов, которые смогут припарковаться, затем – общее количество автомобилей (как легковых, так и автобусов), которые уедут из-за отсутствия мест.
Решение (Python)
file = open(’26_2__1vn99.txt’) # считываем количество машин в файле count_cars,count_A,count_B = map(int,file.readline().split()) cars = [] # список, в котором будут записаны машины for i in range(count_cars): start,duration,type = file.readline().split() # считываем текущую строку start,duration = int(start),int(duration) # переводим в число время приезда и длительность парковки # используем функцию ord для перевода буквы в число. А станет 0, а В станет 1. Это сделано для удобства дальнейшего обращения со списком type = ord(type) % 65 cars.append([start,duration,type]) # добавляем запись о машине в список cars.sort() # сортируем список # симулируем парковку, списки парковочных мест для каждой категории parking = [[-1 for i in range(count_A)],[-1 for i in range(count_B)]] all_cars_count = 0 # количество припаркованных машин любого вида count_cars_B = 0 # количество припаркованных автобусов for start,duration,category in cars: # перебор машин в списке # флаг, который показывает нашли мы ли место для парковки для текущей машины или нет. # Это сделано, с той целью, чтобы позже сбросить циклы перебора категории и перебор парковочных мест определенной категории. ok = False # перебираем категорию для парковочного места for categ in range(category,2): # перебираем парковочные места определенной категории for i in range(len(parking[categ])): # если время приезда текущей машины совпадает или больше времени уезда той, что уже припаркована на данном парковочном месте if start >= parking[categ][i]: parking[categ][i] = start + duration # то припарковываем текущую машину на это парковочное место all_cars_count += 1 # увеличиваем количество припаркованных машин любого вида if category == 1: # если текущая машина - автобус count_cars_B += 1 # то увеличиваем счётчик припаркованных автобусов ok = True # отмечаем, что машину припарковали break # сбрасываем цикл, переходим к следующей категории if ok: # если текущую машину припарковали break # то сбрасываем цикл, чтобы перейти к следующей машине # Вывод количества припаркованных автобусов и количества не припаркованных машин любого вида print(count_cars_B,count_cars - all_cars_count)
Ошибка.
Попробуйте повторить позже
На парковке расположены парковочные места для A категорий автомобилей. Номер категории – целое неотрицательное число, меньшее, чем A. Для каждой категории автомобилей выделено некоторое количество парковочных мест. Приезжающий на парковку автомобиль занимает любое свободное место среди мест, предназначенных для автомобилей его категории, а также среди мест, предназначенных для автомобилей c большим номером категории. Автомобиль всегда паркуется на подходящем свободном месте для автомобилей с наименьшей категорией. Если подходящего свободного места нет, автомобиль уезжает. Гарантируется, что никакие два автомобиля не приезжают одновременно. Если время прибытия автомобиля совпадает со временем окончания стоянки другого автомобиля, вновь прибывший автомобиль может занять освободившееся место, если оно подходит ему.
Пусть B – максимальный номер категории автомобилей, в которой за всё время припарковалось наибольшее количество автомобилей. Определите время, через которое освободятся (и больше не будут заняты) все парковочные места, предназначенные для категории автомобилей с номером B, и общее количество автомобилей всех категорий, которые уедут из-за отсутствия мест.
Входные данные. Первая строка входного файла содержит два натуральных числа, записанных через пробел: A – количество категорий автомобилей, , и C – общее количество автомобилей, приехавших на парковку в течение одного года, . Вторая строка содержит A чисел – количество парковочных мест на стоянке для автомобилей каждой категории, начиная с категории под номером 0, в порядке возрастания номеров категорий. Каждое из этих чисел не превышает 1000. Каждая из C последующих строк описывает один автомобиль и содержит три целых числа: время в минутах с начала года, когда автомобиль прибыл на парковку; необходимую длительность стоянки в минутах и номер категории автомобиля.
В ответе запишите два целых числа: время освобождения парковочных мест для автомобилей категории B, затем – общее количество автомобилей всех категорий, которые уедут из-за отсутствия мест.
Решение (Python)
file = open(’26_3__1vn9a.txt’) # считываем количество машин в файле count_category,count_cars = map(int,file.readline().split()) # Количество парковочных мест для каждой категории all_category = list(map(int,file.readline().split())) cars = [] # список, в котором будут записаны машины for i in range(count_cars): start,duration,type = map(int,file.readline().split()) cars.append([start,duration,type]) # добавляем запись о машине в список cars.sort() # сортируем список # симулируем парковку, списки парковочных мест для каждой категории parking = [] for i in range(count_category): parking.append([-1 for i in range(all_category[i])]) # добавление парковочных мест для определенной категории count = [0 for i in range(count_category)] for start,duration,category in cars: # перебор машин в списке # флаг, который показывает нашли мы ли место для парковки для текущей машины или нет. # Это сделано, с той целью, чтобы позже сбросить циклы перебора категории и перебор парковочных мест определенной категории. ok = False # перебираем категорию для парковочного места for categ in range(category,count_category): # перебираем парковочные места определенной категории for i in range(len(parking[categ])): # если время приезда текущей машины совпадает или больше времени уезда той, что уже припаркована на данном парковочном месте if start >= parking[categ][i]: parking[categ][i] = start + duration # то припарковываем текущую машину на это парковочное место count[categ] += 1 # увеличиваем количество припаркованных машин на парковочном месте определенной категории ok = True # отмечаем, что машину припарковали break # сбрасываем цикл, переходим к следующей категории if ok: # если текущую машину припарковали break # то сбрасываем цикл, чтобы перейти к следующей машине # Вывод освобождения парковочных мест категории, в которой припарковалось больше всего машин print(max(parking[count.index(max(count))])) # Вывод количества машин, которые не смогли припарковаться print(count_cars- sum(count))
Ошибка.
Попробуйте повторить позже
На парковке расположены парковочные места для A категорий автомобилей. Номер категории – целое неотрицательное число, меньшее, чем A. Для каждой категории автомобилей выделено некоторое количество парковочных мест. Приезжающий на парковку автомобиль занимает любое свободное место среди мест, предназначенных для автомобилей его категории, а также среди мест, предназначенных для автомобилей c большим номером категории. Автомобиль всегда паркуется на подходящем свободном месте для автомобилей с наименьшей категорией. Если подходящего свободного места нет, автомобиль уезжает. Гарантируется, что никакие два автомобиля не приезжают одновременно. Если время прибытия автомобиля совпадает со временем окончания стоянки другого автомобиля, вновь прибывший автомобиль может занять освободившееся место, если оно подходит ему.
Пусть B – минимальный номер категории парковочных мест, в которой за всё время припарковалось наибольшее количество автомобилей. Определите время, через которое освободятся (и больше не будут заняты) все парковочные места категории B, и количество автомобилей, которые парковались на местах категории B.
Входные данные. Первая строка входного файла содержит два натуральных числа, записанных через пробел: А – количество категорий автомобилей, , и C – общее количество автомобилей, приехавших на парковку в течение одного года, 10000. Вторая строка содержит A чисел – количество парковочных мест на стоянке для автомобилей каждой категории, начиная с категории под номером 0, в порядке возрастания номеров категорий. Каждое из этих чисел не превышает 1000. Каждая из C последующих строк описывает один автомобиль и содержит три целых числа: время в минутах с начала года, когда автомобиль прибыл на парковку; необходимую длительность стоянки в минутах и номер категории автомобиля.
В ответе запишите два целых числа через пробел: время освобождения парковочных мест категории B, затем – общее количество автомобилей, которые парковались на местах категории B.
Решение (Python)
file = open(’26_4__2yzqa.txt’) # считываем количество машин в файле count_category,count_cars = map(int,file.readline().split()) # Количество парковочных мест для каждой категории all_category = list(map(int,file.readline().split())) cars = [] # список, в котором будут записаны машины for i in range(count_cars): start,duration,type = map(int,file.readline().split()) cars.append([start,duration,type]) # добавляем запись о машине в список cars.sort() # сортируем список # симулируем парковку, списки парковочных мест для каждой категории parking = [] for i in range(count_category): parking.append([-1 for i in range(all_category[i])]) # добавление парковочных мест для определенной категории count = [0 for i in range(count_category)] for start,duration,category in cars: # перебор машин в списке # флаг, который показывает нашли мы ли место для парковки для текущей машины или нет. # Это сделано, с той целью, чтобы позже сбросить циклы перебора категории и перебор парковочных мест определенной категории. ok = False # перебираем категорию для парковочного места for categ in range(category,count_category): # перебираем парковочные места определенной категории for i in range(len(parking[categ])): # если время приезда текущей машины совпадает или больше времени уезда той, что уже припаркована на данном парковочном месте if start >= parking[categ][i]: parking[categ][i] = start + duration # то припарковываем текущую машину на это парковочное место count[categ] += 1 # увеличиваем количество припаркованных машин на парковочном месте определенной категории ok = True # отмечаем, что машину припарковали break # сбрасываем цикл, переходим к следующей категории if ok: # если текущую машину припарковали break # то сбрасываем цикл, чтобы перейти к следующей машине # Вывод освобождения парковочных мест категории, в которой припарковалось больше всего машин print(max(parking[count.index(max(count))])) # Вывод количества машин, которые припарковались на категории парковочных мест где припарковалось больше всего машин print(max(count))
Ошибка.
Попробуйте повторить позже
Входной файл содержит заявки пассажиров, желающих сдать свой багаж в камеру хранения. В заявке указаны время сдачи багажа (в минутах от начала суток) и время, на которое пассажир сдает багаж (в минутах).
Багаж одного пассажира размещается в одной свободной ячейке с минимальным номером. Ячейки пронумерованы начиная с единицы. Размещение багажа в ячейке или её освобождение происходит в течение 1 мин. Багаж можно поместить в только что освобождённую ячейку начиная со следующей минуты. Если в момент сдачи багажа свободных ячеек нет, то пассажир уходит. Если два пассажира приходят одновременно, приоритет будет у того, у кого время хранения багажа будет меньше.
Определите, сколько всего пассажиров не смогут оставить свой багаж в ячейках и общее время, в течение которого все ячейки будут заняты (без учета времени на разгрузку ячейки). Гарантируется, что все пассажиры, сдавшие багаж, заберут его в пределах 24 часов (время хранения каждого багажа не более 24 часов).
Входные данные. В первой строке входного файла находится число A – количество ячеек в камере хранения, во второй строке файла число B – количество пассажиров, сдающих багаж (натуральное число, не превышающее 1000). Каждая из следующих B строк содержит два натуральных числа: время сдачи багажа (не превышает 1600) и время хранения багажа (не превышает 1600).
Запишите в ответе два числа через пробел: количество пассажиров, которые не смогли воспользоваться камерой хранения и общее время, в течении которого все ячейки будут заняты.
file = open(’26_6__3mk0m.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 # количество человек, которые смогли положить вещи в камеру хранения # временной промежуток от 0 до 3500 минут. Каждый элемент списка это определенная минута. # Значение под определенной ячейкой - это количество занятых камер в данную минуту time = [0 for i in range(3500)] count_minute = 0 # количество минут, в течении которых были заняты все камеры for client in array_client: # проход по клиентам for i in range(len(cameras)): # проход по камерам хранения # если время прихода текущего клиента больше чем время освобождения данной камеры if client[0] > cameras[i]: cameras[i] = client[0]+client[1] # тогда записываем время освобождения данной камеры текущим клиентом count += 1 # проходимся по минутам от времени прихода до времени ухода текущего клиента for minute in range(client[0],client[0]+client[1]): time[minute] += 1 # отмечаем под каждой минутой, что на одну камеру стало занято больше break # прерываем цикл, так как текущий клиент уже положил свои вещи и переходим к следующему клиенту for i in time: # проход по отрезку времени if i == count_cameras: # если количество занятых камер равно количеству камер в файле count_minute += 1 # увеличиваем счётчик минут, в течении которого были заняты все камеры # количество людей, которые не смогли положить вещи можно посчитать следующим образом: # общее кол-во людей - кол-во людей положивших вещи в камеру print(count_client- count,count_minute)
Ошибка.
Попробуйте повторить позже
В некотором салоне красоты есть К мест для процедур. После каждого клиента место необходимо убрать, на это уходит 10 минут. Уборка начинается в следующую минуту после того, как уходит клиент. Новый клиент может сесть в следующую минуту после завершения уборки. Салон работает с 7:00 и закрывается в 24:00. Все клиенты должны уйти не позже 24:00. За это время в него приходит N клиентов. При этом гарантируется, что они придут не раньше 7:00, а планируют уйти не позже 24:00.
Каждого клиента при входе встречает администратор и подбирает для него место с минимальным номером. Может случиться так, что несколько людей придет одновременно, тогда администратор в первую очередь подбирает место для того, кто планирует сидеть меньшее время. В случае если все места заняты, клиент готов подождать не более 20 минут, при этом за местом он пробудет обязательно T минут (T – разница между временем прибытия и отбытия), в этом случае выбирается место, которое освободится раньше всех. Если мест несколько, выбирается с меньшим номером.
Входные данные. На первой строке одно число N – количество клиентов, пришедших за день. На второй строке одно число K – количество мест в салоне. Далее N строк, в каждой из которых указано время, когда клиент пришел и время, до которого он планировал пробыть в салоне (время дано в минутах от начала дня).
Определите, сколько клиентов получится обслужить за время работы салона и номер места, за который сядет последний клиент. Числа в ответе запишите через пробел.
f=open(’26_7__1vn9f.txt’) n=int(f.readline()) # считываем количество пришедших клиентов k=int(f.readline()) # считываем количество мест в салоне clients = [] # список клиентов for line in f.readlines(): a,b=map(int, line.split()) clients.append([a,b]) clients.sort() # сортируем список клиентов table = [-1]*k # список, симулирующий каждое рабочее место, в котором будет записано время, в которое освободится каждое место ans1=0 ans2=0 for client in clients: # проход по каждому клиенту ok = False # флаг, которые показывает нужно ли человеку ждать или нет for i in range(k): # проход по всем рабочим местам в салоне # если время прихода текущего клиента больше чем время освобождения данного места другим клиентом и при этом текущий клиент уйдёт ранее закрытия магазина if client[0]>table[i] and client[1] <= 1440: table[i]=client[1]+10 # записываем время ухода текущего клиента с учётом уборки данного места после него ok = True # помечаем, что для текущего клиента нашли место ans1+=1 # увеличиваем счётчик пришедших клиентов ans2+=i+1 # запоминаем номер места, куда сел последний клиент break # прерываем цикл - переходим к следующему клиенту if not ok: # если клиенту нужно подождать mt=min(table) # определяем место, которое освободится в ближайшее время mintime=mt-client[0]+1 # определяем время, которое человеку нужно подождать прежде чем сесть за него # если время ожидания не более 20 минут if mintime<=20: ind=table.index(mt) # определяем индекс данного места в списке T=client[1]-client[0] # считаем время T if table[ind]+1+T<=1440: # если данный клиент уйдёт не позже закрытия table[ind]+=1+T+10 # то сажаем данного человека за место ans1+=1 # увеличиваем счётчик пришедших клиентов ans2=ind+1 # запоминаем номер места, куда сел последний клиент print(ans1,ans2)
Ошибка.
Попробуйте повторить позже
На вокзале есть камера хранения из K ячеек, которые пронумерованы с 1. Принимаемый багаж кладется в свободную ячейку с минимальным номером. Известно время, когда пассажиры сдают и забирают багаж (в минутах с начала суток). Ячейка доступна для багажа, начиная со следующей минуты, после окончания срока хранения. Если свободных ячеек не находится, то багаж не принимается в камеру хранения.
Найдите количество багажей, которое будет сдано в камеры за 24 часа и номер ячейки, в которую сдаст багаж последний пассажир.
Входные данные. В первой строке входного файла находится число K – количество ячеек в камере хранения, во второй строке файла число N – количество пассажиров, сдающих багаж (натуральное число, не превышающее 1000). Каждая из следующих N строк содержит два натуральных числа, не превышающих 1440: время сдачи багажа и время выдачи багажа.
Выходные данные Программа должна вывести два числа через пробел: количество сданных в камеру хранения багажей и номер ячейки, в которую примут багаж у последнего пассажира, который сможет сдать багаж.
Решение (Python)
f = open(’26_8__3mjzz.txt’) k = int(f.readline()) # количество камер хранения n = int(f.readline()) # количество пассажиров, сдающих багаж # Создаём список, в котором будут храниться данные о времени, # когда каждый пассажир собирается сдавать и забирать вещи a=[list(map(int, i.split())) for i in f] # Применяем сортировку, чтобы пассажиры приходили в том порядке, который задан временем их прихода a.sort() # Список с данными о каждой камере cell=[-1]*k count = 0 # Кол-во пассажиров, сдавших багаж last = 0 # Номер камеры, в которую примут вещи у последнего пассажира # Перебор пассажиров for i in range(n): # Проходимся по каждой камере for j in range(len(cell)): # Если из текущей камеры багаж заберут раньше, # чем придёт пассажир, то помещаем багаж пассажира в эту камеру. # В списке сохраняем время, когда пассажир должен забрать багаж из камеры. if a[i][0]>cell[j]: count+=1 cell[j]=a[i][1] # Сохраняем номер последней ячейки # (прибавляем единицу, так как нумерация камер с единицы, а не с нуля) last=j+1 # Прерываем внутренний цикл, чтобы перейти к следующему пассажиру break print(count, last)
Ошибка.
Попробуйте повторить позже
В отеле составляют недельный план уборки номеров после отъезда клиентов. Все номера одинаковые и пронумерованы с 1 до К. В основе плана журнал заявок, в каждой из которых записано время заезда и время выезда для N заявок. Заявки поступают в случайном порядке. На начало недели все номера подготовлены к заселению.
После отъезда клиента на уборку номера отводится 45 минут. Уборка начинается в следующую минуту после освобождения номера. Клиент может заезжать в подготовленный номер в следующую минуту после уборки. Если подготовленных номеров несколько, то выбирается номер с максимальным временем простоя. Если время простоя одинаковое, то в последний номер. Если подготовленных номеров нет, клиент ждет первый подготовленный номер. При этом время отъезда не меняется.
Найти максимальное время ожидания клиента перед заселением и последний заселенный на планируемой неделе номер. Из-за ожидания заселение может произойти на следующей неделе, что будет учитывается в планах следующей недели. Числа в ответе запишите через пробел.
Входные данные: На первой строке одно число K – количество номеров. На второй строке одно число N – количество заявок. Далее N строк, в каждой из которых указано время заезда и время выезда в минутах, начиная с 0:00 воскресенья.
# k – количество номеров # n – количество заявок # data — список со всеми данными f = open(’C:/26_10.txt’) k = int(f.readline()) n = int(f.readline()) data = [list(map(int, f.readline().split())) for i in range(n)] data.sort() freeTime = [0] * k # время готовности каждого номера maxWait = 0 # максимальное время ожидания клиента перед заселением lastRoom = -1 # последний заселенный на планируемой неделе номер for start, end in data: rn = 0 # для номера с макс. простоем for i in range(1, k): # Если из этого номера выехали раньше, чем из остальных, # то сохраняем его if freeTime[i] <= freeTime[rn]: rn = i # Расчёт максимального времени ожидания клиента перед заселением. # Если получится так, что к приезду клиента не будет свободного номера, # то он может заселиться в номер, который освободится раньше через какое-то время. # Здесь мы это время и рассчитываем. # Если доступный номер будет, # то разность будет отрицательной, значение maxWait так и останется 0 maxWait = max(freeTime[rn] - start, maxWait) # Если в номер можно заселиться и проживание будет на этой неделе, # то сохраняем номер. Также сохраняем в списке значение выезда из номера. if freeTime[rn] <= end and freeTime[rn] < 7*24*60: freeTime[rn] = end + 46 lastRoom = rn + 1 print(maxWait, lastRoom)
Ошибка.
Попробуйте повторить позже
В парке развлечений есть K аттракционов. Все аттракционы пронумерованы, начиная с 1. Известно время, в которое каждый посетитель хочет начать свою поездку на аттракционе, и в какое время он закончит кататься на нём. Аттракцион считается свободным, если на нём никто не катается. Каждый посетитель должен выбрать свободный аттракцион с наименьшим номером. Если в момент прихода посетителя все аттракционы заняты, то посетитель уходит, не дожидаясь освобождения одной из них. Если некоторые посетители придут в парк одновременно, они будут кататься на одном и том же аттракционе вместе. Для того, чтобы остановить и запустить аттракцион заново, необходима 1 минута. Со следующей минуты следующие посетители могут воспользоваться аттракционом. Каждый посетитель за весь день может покататься только на одном аттракционе.
Определите, наибольшее количество посетителей, которые придут в парк и покатаются на аттракционах за 24 часа и номер аттракциона, на котором прокатится последний посетитель.
Входные данные. В первой строке входного файла находится два числа K – количество аттракционов в парке развлечений и N – количество посетителей, которые придут в этот парк (натуральные числа, не превышающее 2000). В следующих N строках находятся два значения: минута прихода и минута, не раньше которой посетитель закончит кататься на аттракционе, отсчёт ведётся от начала суток (все числа неотрицательные, не превышающие 1440), для каждого посетителя – в отдельной строке.
Запишите в ответе два целых числа через пробел: сначала количество посетителей, которое сможет воспользоваться аттракционами в парке развлечений за 24 часа, затем номер аттракциона, на котором прокатится последний посетитель.
f = open(’26_11__1vn9j.txt’) k, n = map(int,f.readline().split()) a = sorted([list(map(int, i.split())) for i in f]) # переменная для подсчета количества человек count = 0 lt = 0 # переменная которая хранит время запуска определенного атракциона d_s = [-1]*k # переменная которая хранит время остановки определенного атракциона d_e = [-1]*k # цикл по людям for x in a: start,end = x # цикл по аттракционам for j in range(k): # если время запуска больше времени останова прошлого раза # или если время запуска равно, так как 2 (и более) человека могут кататься на одном аттракционе одновременно if start > d_e[j] or (start == d_s[j]): # прибавляем колчество прокатившихся, обновляем переменные конца и начала count+=1 d_s[j] = start d_e[j] = end lt = j+1 # останавливаем цикл, так как для этого человека уже найден аттракцион break print(count,lt)
Ошибка.
Попробуйте повторить позже
В городе открылось кафе. В нем есть К столиков. После каждого клиента столик необходимо убрать, на это уходит 8 минут. Уборка начинается в следующую минуту после того, как уходит гость. Новый клиент может сесть в следующую минуту после завершения уборки. Кафе работает с 7:00 и закрывается в 23:00. Все клиенты должны уйти не позже 23:00. За это время в него приходит N клиентов. (Гарантируется, что они придут не раньше 7:00, а планируют уйти не позже 23:00).
Каждого гостя при входе встречает администратор и подбирает для него стол с минимальным номером. Может случиться так, что несколько людей придет одновременно, тогда администратор в первую очередь подбирает столик для того, кто планирует сидеть меньшее время. В случае если все столы заняты, гость готов подождать не более 25 минут, при этом за столом он пробудет обязательно T минут (T – разница между временем прибытия и отбытия), в этом случае выбирается столик, который освободится раньше всего. Если таких несколько, выбирается с меньшим номером.
Определите, сколько клиентов получится обслужить за время работы кафе и номер столика, за который сядет последний клиент. В ответ запишите числа через пробел.
Входные данные. На первой строке одно число N – количество гостей, пришедших за день. На второй строке одно число K – количество столиков в кафе. Далее N строк, в каждой из которых указано время, когда клиент пришел и время, до которого он планировал пробыть в кафе (время дано в минутах от начала дня).
Решение (Python)
f=open(’26_15__1vn9n.txt’) n=int(f.readline()) k=int(f.readline()) clients = [] # список клиентов for line in f.readlines(): a,b=map(int, line.split()) clients.append([a,b]) clients.sort() # сортируем список клиентов table = [-1]*k # список, симулирующий каждое рабочее место, в котором будет записано время, в которое освободится каждое место ans1=0 ans2=0 for client in clients: # проход по каждому клиенту ok = False # флаг, которые показывает нужно ли человеку ждать или нет for i in range(k): # проход по всем рабочим местам в салоне # если время прихода текущего клиента больше чем время освобождения данного места другим клиентом и при этом текущий клиент уйдёт ранее закрытия магазина и придёт позже или во время открытия if client[0]>table[i] and client[0] >= 420 and client[1] <= 1380: table[i]=client[1]+8 # записываем время ухода текущего клиента с учётом уборки данного места после него ok = True # помечаем, что для текущего клиента нашли место ans1+=1 # увеличиваем счётчик пришедших клиентов ans2=i+1 # запоминаем номер места, куда сел последний клиент break # прерываем цикл - переходим к следующему клиенту if not ok: # если клиенту нужно подождать mt=min(table) # определяем индекс данного места в списке mintime=mt-client[0]+1 # считаем время T if mintime<=25: # если время ожидания не более 25 минут ind=table.index(mt) # определяем индекс данного места в списке T=client[1]-client[0] # считаем время T if table[ind]+1+T<=1380: # если данный клиент уйдёт не позже закрытия table[ind]+=1+T+8 # то сажаем данного человека за место ans1+=1 # увеличиваем счётчик пришедших клиентов ans2=ind+1 # запоминаем номер места, куда сел последний клиент print(ans1,ans2)
Ошибка.
Попробуйте повторить позже
У организации есть собственный гостиничный комплекс для сотрудников, и список сотрудников, которые планируют взять отпуск в следующем календарном году. Здание гостиницы содержит номеров. Все номера одного класса и с одинаковым количеством мест. Нумерация комнат начинается с . Сотрудника поселяют в комнату с минимально возможным номером. Известна дата брони комнаты (номер дня от начала года), и количество дней, на которое осуществляется бронь. Т.к. после выезда постояльца требуется уборка, другой постоялец может заехать в номер только на следующий день. Если свободных номеров в гостинице нет, сотрудника поселяют в другой отель. Все сотрудники уходят в отпуск в разные дни года.
Найдите количество сотрудников, которые заедут в гостиницу, и номер комнаты, которая будет сдана последнему сотруднику.
Входные данные
Первая строка файла содержит число — количество сотрудников, которые планируют взять отпуск (натуральное число, не превышающее ). Вторая строка содержит одно число — количество номеров в гостиничном комплексе (натуральное число, не превышающее ). Каждая из следующих строк содержит два числа — день заезда (от начала года), и количество дней проживания.
Выходные данные
Два натуральных числа: количество сотрудников, которые заедут в гостиницу, и номер комнаты, которая будет сдана последнему сотруднику.
Решение (Python)
f = open(’1__1vrj4.txt’) # Считываем количество ячеек номеров (K) и количество клиентов (N) n = int(f.readline()) k = int(f.readline()) # Создаем список для хранения времени приезда и уезда каждого человека # и считываем эти данные из файла, разделяя каждую строку на два числа a = [list(map(int, i.split())) for i in f] # Сортируем список пассажиров по времени сдачи багажа a.sort() # Создаем список для хранения состояния каждого номера (занята/свободна) s = [-1]*k # Инициализируем переменные для подсчета количества сданных номеров # и для хранения номера последней занятого номера count = last = 0 # Проходим по каждому клиента for i in range(n): # Проходим по каждому номеру в гостинице for j in range(len(s)): # Если время приезда текущего клиента больше времени освобождения номера if a[i][0] > s[j]: # Увеличиваем счетчик сданных номеров count += 1 # Занимаем текущий номер s[j] = a[i][0] + a[i][1] # Обновляем номер последней занятого номера last = j + 1 # Прерываем внутренний цикл, чтобы перейти к следующему клиента break # Выводим количество сданных номеров и номер последней занятого номера print(count, last)
Ошибка.
Попробуйте повторить позже
У организации есть собственный гостиничный комплекс для сотрудников, и список сотрудников, которые планируют взять отпуск в следующем календарном году. Здание гостиницы имеет этажей, на каждом из которых К номеров. Нумерация комнат начинается с . Например, если , то на первом этаже будут комнаты с 1-й по 10-ю, на втором - с 11-Й по 20-ю, и т.д. При этом вместительность комнаты равна этажу, на котором эта комната расположена, т.е. на первом этаже -— одноместные, на втором — двухместные, ит.д. Сотрудника поселяют в комнату с минимально возможным номером. Известна дата брони комнаты (номер дня от начала года), количество дней, на которое осуществляется бронь, и количество членов семьи, которые едут в отпуск вместе с сотрудником. Т.к. после выезда постояльца требуется уборка, другой постоялец может заехать в номер только на следующий день. Если свободных номеров необходимой вместительности в гостинице нет, сотрудника поселяют в другой отель, Все сотрудники уходят в отпуск в разные дни года. Найдите количество сотрудников, которые заедут в гостиницу, и номер комнаты, которая будет сдана последнему сотруднику.
Входные данные
Первая строка файла содержит число — количество сотрудников, которые планируют взять отпуск (натуральное число, не превышающее ). Вторая строка содержит одно число — количество номеров на каждом этаже комплекса (натуральное число, не превышающее ). Каждая из следующих строк содержит три числа – день заезда (от начала года), количество дней проживания, и количество человек для заселения.
Выходные данные
Два натуральных числа через пробел: количество сотрудников, которые заедут в гостиницу, и номер комнаты, которая будет сдана последнему сотруднику.
Решение (Python)
file = open(’Задание_26__1vrju.txt’) count_client = int(file.readline()) count_rooms = int(file.readline()) clients = [list(map(int, i.split())) for i in file] # Сортируем список клиентов clients.sort() # Создаем список для хранения состояния каждого номера (занята/свободна) hotel = [[-1 for i in range(count_rooms)] for j in range(5)] count = 0 last = 0 # перебор клиентов for start,duration,cnt in clients: # перебор комнат необходимого этажа для клиента for i in range(len(hotel[cnt-1])): # если время приезда текущего клиента больше времени освобождения номера другим клиентом if start > hotel[cnt-1][i]: hotel[cnt - 1][i] = start + duration # записываем в этот номер время освобождения текущего клиента count += 1 # увеличиваем счётчик last = ((cnt-1)*10) + (i+1) # определяем номер, в который заселился последний клиент break # прерываем цикл для того чтобы перейти к следующему клиенту print(count,last)
Ошибка.
Попробуйте повторить позже
Источник: https://kpolyakov.spb.ru/
В гостинице составляют недельный план уборки номеров после отъезда клиентов. Все номера одинаковые и пронумерованы с до . В основе плана – журнал заявок, в каждой из которых записано время заезда и время выезда для заявок. Заявки поступают в случайном порядке. На начало недели все номера подготовлены к заселению. После отъезда клиента на уборку номера отводится минут. Уборка начинается в следующую минуту после освобождения номера. Клиент может заезжать в подготовленный номер в следующую минуту после окончания уборки. Если подготовленных номеров несколько, то выбирается номер с максимальным временем простоя; из номеров с одинаковым временем простоя – последний номер. Если подготовленных номеров нет, клиент ждет первый подготовленный номер; при этом время отъезда не меняется.
Определите максимальное время ожидания клиента перед заселением и последний номер, заселенный в течение этой недели.
Входные данные
В первой строке входных данных задается два числа: – количество номеров () и – количество заявок (). В каждой из последующих строк указано время заезда и время выезда в минутах, начиная с воскресенья.
Выходные данные
Запишите в ответе два числа: максимальное время ожидания клиента перед заселением и последний номер, заселенный в течение этой недели.
Пример входного файла:
При таких исходных данных первый клиент в минуту сразу заезжает в номер , в -ю минуту второй клиент заезжает в номер (без ожидания). На -й минуте первый клиент выезжает из номера и в этом номере сразу начинается уборка, которая заканчивается на -й минуте. Поэтому третий клиент, который хотел заселиться на -й минуте, будет ждать минуту и заселится в номер на -й минуте. Аналогично четвёртый клиент, который хотел заселиться на -й минуте, должен ждать минут, потому что готовый номер будет готов только на минуте. Последний клиент, желающий заселиться на -й минуте, фактически сможет сделать это только на минуте, так что он будет ждать 40 минут и заселится в номер . Ответ: .
with open(’26.txt’) as F: K, N = map( int, F.readline().split() ) data = [ tuple(map(int, F.readline().split())) for i in range(N) ] data.sort() freeTime = [0]*K # время готовности maxWait = 0 lastRoom = -1 for tStart, tEnd in data: k = 0 for i in range(1, K): if freeTime[i] <= freeTime[k]: k = i maxWait = max( freeTime[k] - tStart, maxWait ) if freeTime[k] <= tEnd and freeTime[k] < 7*24*60: print( tStart, tEnd, ’->’, k+1, max(0,freeTime[k] - tStart) ) freeTime[k] = max( freeTime[k], tEnd ) + 31 lastRoom = k + 1 print( maxWait, lastRoom )
Ошибка.
Попробуйте повторить позже
Источник: https://kpolyakov.spb.ru/
На парковке расположены парковочные места для категорий автомобилей. Номер категории – целое неотрицательное число, меньшее, чем . Для каждой категории автомобилей выделено некоторое количество парковочных мест. Приезжающий на парковку автомобиль занимает любое свободное место среди мест, предназначенных для автомобилей его категории, а также среди мест, предназначенных для автомобилей c б´oльшим номером категории. Автомобиль всегда паркуется на подходящем свободном месте для автомобилей с наименьшей категорией. Если подходящего свободного места нет, автомобиль уезжает. Гарантируется, что никакие два автомобиля не приезжают одновременно. Если время прибытия автомобиля совпадает со временем окончания стоянки другого автомобиля, вновь прибывший автомобиль может занять освободившееся место, если оно подходит ему.
Пусть – минимальный номер категории парковочных мест, в которой за всё время припарковалось наибольшее количество автомобилей. Определите время, через которое освободятся (и больше не будут заняты) все парковочные места категории , и количество автомобилей, которые парковались на местах категории .
Входные данные
Первая строка входного файла содержит два натуральных числа, записанных через пробел: – количество категорий автомобилей, M, и – общее количество автомобилей, приехавших на парковку в течение одного года, N. Вторая строка содержит M чисел – количество парковочных мест на стоянке для автомобилей каждой категории, начиная с категории под номером , в порядке возрастания номеров категорий. Каждое из этих чисел не превышает . Каждая из последующих строк описывает один автомобиль и содержит три целых числа: время в минутах с начала года, когда автомобиль прибыл на парковку; необходимую длительность стоянки в минутах и номер категории автомобиля.
Выходные данные
В ответе запишите два целых числа: время освобождения парковочных мест категории , затем – общее количество автомобилей, которые парковались на местах категории .
Пример входного файла:
При таких исходных данных: -й автомобиль (категории ) припаркуется на месте категории с по минуты, -й автомобиль (категории ) припаркуется на месте категории с по минуты, -й автомобиль (категории ) припаркуется на месте категории с по минуты, -й автомобиль (категории ) не найдет место, -й автомобиль (категории ) не найдет место. В категории мест с номером припарковалось максимальное количество автомобилей – , все парковочные места категории освободились на -й минуте. Ответ: .
Решение (Python)
file = open(’Задание_27__1vtrl.txt’) # считываем количество машин в файле count_category,count_cars = map(int,file.readline().split()) # Количество парковочных мест для каждой категории all_category = list(map(int,file.readline().split())) cars = [] # список, в котором будут записаны машины for i in range(count_cars): start,duration,type = map(int,file.readline().split()) cars.append([start,duration,type]) # добавляем запись о машине в список cars.sort() # сортируем список # симулируем парковку, списки парковочных мест для каждой категории parking = [] for i in range(count_category): parking.append([-1 for i in range(all_category[i])]) # добавление парковочных мест для определенной категории count = [0 for i in range(count_category)] for start,duration,category in cars: # перебор машин в списке # флаг, который показывает нашли мы ли место для парковки для текущей машины или нет. # Это сделано, с той целью, чтобы позже сбросить циклы перебора категории и перебор парковочных мест определенной категории. ok = False # перебираем категорию для парковочного места for categ in range(category,count_category): # перебираем парковочные места определенной категории for i in range(len(parking[categ])): # если время приезда текущей машины совпадает или больше времени уезда той, что уже припаркована на данном парковочном месте if start >= parking[categ][i]: parking[categ][i] = start + duration # то припарковываем текущую машину на это парковочное место count[categ] += 1 # увеличиваем количество припаркованных машин на парковочном месте определенной категории ok = True # отмечаем, что машину припарковали break # сбрасываем цикл, переходим к следующей категории if ok: # если текущую машину припарковали break # то сбрасываем цикл, чтобы перейти к следующей машине # Вывод освобождения парковочных мест категории, в которой припарковалось больше всего машин print(max(parking[count.index(max(count))])) # Вывод количества машин, которые припарковались на категории парковочных мест где припарковалось больше всего машин print(max(count))