26.06 Распределение объектов по местам (хранение багажа, парковки, кафе, гостиницы)
Готовиться с нами - ЛЕГКО!
Ошибка.
Попробуйте повторить позже
В магазине есть N камер хранения. В магазин приходят покупатели и оставляют свои вещи в камерах хранения. Покупатель занимает одну из камер с минимальным номером. Нумерация камер начинается с 1. Следующий покупатель может занять камеру хранения со следующей минуты после освобождения камеры. Освобождение начинается в следующую минуту после того, как покупатель забирает свои вещи, и длится 5 минут. Время, которое занята ячейка, не учитывает время освобождения ячейки и равняется разности времени ухода и времени прибытия клиента. Известно время сдачи вещей каждого покупателя и время выдачи вещей каждому покупателю. Если свободных камер нет, то покупатели уходят. Если в один момент пришло несколько покупателей, то сначала вещи в камеру положит клиент, у которого меньшее количество времени вещи будут находиться в камере.
Входные данные: В первой строке файла находится натуральное число N – количество покупателей. Во второй строке файла находится натуральное число K – количество камер хранения в магазине. В последующих строках записано по два числа, не превышающих 1500: время прибытия клиента, время ухода клиента.
Запишите в ответ два числа через пробел: количество покупателей, которые не смогут сдать вещи в камеры хранения, и количество минут, которое суммарно будут заняты ячейки.
Решение (Python)
f = open(’26_dif_3__40zrx.txt’) n = int(f.readline()) k = int(f.readline()) clients = [list(map(int, i.split())) for i in f] clients.sort() cameras = [-1] * k # список, симулирующий каждую камеру хранения, в котором будет записано время, в которое освободится каждое место cnt = 0 sm = 0 for start, end in clients: # проход по клиентам for j in range(k): # проход по камерам хранения if start > cameras[j]: # Пример: предыдущий клиент уходит в 10-ю минуту # В 11-ю минуту начинается освобождение # Освобождение длится 5 минут: 11-я, 12-я, 13-я, 14-я, 15-я # В 16-ю минуту может занять следующий клиент # Значит, если в условии строгий знак, то прибавлять нужно 5 cameras[j] = end + 5 cnt += 1 sm += end - start # суммируем время, в течении которого вещь будет находиться в камере break # сбрасываем цикл - переходим к следующему клиенту print(n - cnt, sm)
Ошибка.
Попробуйте повторить позже
В новом городе Подмосковске открылся новый ресторан - Кафеск. В нем есть А столиков. После каждого клиента, посетившего ресторан, необходимо убрать столик, на это уходит 8 минут. Уборка начинается в следующую минуту после ухода клиента. Новый клиент может сесть в следующую минуту после завершения уборки. Ресторан работает с 8:00 и закрывается в 22:30. Все клиенты должны уйти не позже 22:30. За это время в него приходит В клиентов. (Гарантируется, что они придут не раньше 8:00, а планируют уйти не позже 22:30).
Каждого гостя при входе встречает администратор и подбирает для него стол с минимальным номером. Может случиться так, что несколько людей придет одновременно, тогда администратор в первую очередь подбирает столик для того, кто планирует сидеть меньшее время. В случае если все столы заняты, гость готов подождать не более 45 минут, при этом за столом он пробудет обязательно T минут (T – разница между временем прибытия и отбытия), в этом случае выбирается столик, который освободится раньше всего. Если таких несколько, выбирается с меньшим номером.
Определите, сколько клиентов получится обслужить за время работы ресторана и номер клиента, который последний сможет сесть за столик. (Клиентов считают с начала дня начиная с 1). В ответ запишите числа через пробел.
Входные данные: На первой строке одно число В – количество гостей, пришедших за день. На второй строке одно число А – количество столиков в ресторане. Далее В строк, в каждой из которых указано время, когда клиент пришел и время, до которого он планировал пробыть в ресторане (время дано в минутах от начала дня).
f = open(’26_dif_4.txt’) n = int(f.readline()) k = int(f.readline()) clients = [list(map(int, i.split())) for i in f] clients.sort() tables = [-1] * k cnt = 0 number = 0 client_num = 0 for start, end in clients: # Считаем клиентов, у первого номер 1 number += 1 is_sat = False for i in range(k): if start >= tables[i]: # Пример: предыдущий клиент уходит в 10-ю минуту # В 11-ю минуту начинается освобождение # Освобождение длится 8 минут: 11-я, 12-я, 13-я, 14-я, 15-я, 16-я, 17-я, 18-я # В 19-ю минуту может занять следующий клиент # Значит, если в условии не строгий знак, то прибавлять нужно 9 tables[i] = end + 9 is_sat = True cnt += 1 client_num = number break if not is_sat: # Минимальное время освобождения столика min_time = min(tables) if start + 45 >= min_time: # Индекс столика с минимальным временем в нашем списке index = tables.index(min_time) # Время пребывания клиента за столом T = end - start # Проверяем, что клиент уйдёт до закрытия # 22 * 60 + 30 - это 22:30 if tables[index] + T <= 22 * 60 + 30: tables[index] += T + 9 cnt += 1 client_num = number print(cnt, client_num)
Ошибка.
Попробуйте повторить позже
На вокзале есть N камер хранения для пассажиров, которые пронумерованы с нуля. Приходя на вокзал, пассажир кладет свои вещи в свободную камеру с минимальным номером. Известно время, когда пассажиры сдают и забирают вещи (в минутах с начала суток). Камера доступна для багажа начиная со следующей минуты после окончания срока хранения. В случае, когда свободных камер не находится, багаж не принимается и пассажир уходит. Если несколько пассажиров одновременно приходят сдавать багаж, то в раньше ячейку багаж кладет тот, кто раньше забирает.
Найдите номер камеры, в которую сдаст багаж последний пассажир и номер самой популярной камеры (камеры, которой пользовались больше всего раз). Если популярных камер несколько, то необходимо вывести минимальный из номеров таких камер.
Входные данные. В первой строке входного файла находится число K – количество пассажиров, сдающих багаж (натуральное число, не превышающее 10000), во второй строке число N – количество камер хранения. Каждая из следующих B строк содержит два натуральных числа, не превышающих 1440: время сдачи багажа и время выдачи багажа.
Выходные данные. Программа должна вывести два числа через пробел: номер камеры, в которую сдаст багаж последний пассажир и номер самой популярной камеры.
Решение (Python)
f = open(’26_9__4106o.txt’) k = int(f.readline()) n = int(f.readline()) a = sorted(list(map(int, i.split())) for i in f) count = [0] * n # список, в котором будет указано сколько человек положило вещи в определенную камеру хранения camera = [-1] * n # список, симулирующий каждую камеру хранения, в котором будет записано время, в которое освободится каждое место last = 0 for start, end in a: # перебор клиентов for i in range(len(camera)): # проход по камерам хранения if start > camera[i]: camera[i] = end # записываем время освобождения камеры count[i] += 1 # прибавляем 1 к количеству той камеры, в которую положили вещи last = i # записываем номер камеры, в которую положил вещи последний клиент break # прерываем цикл - переходим к следующему человеку # вывод номера камеры, в которую положил вещи последний клиент # вывод номера камеры, в которую положило больше всего людей вещей print(last,count.index(max(count)))
Ошибка.
Попробуйте повторить позже
На мелкосерийном производстве деталей существуют цех фрезеровки и цех окраски. После фрезеровки деталь направляется в окрасочный цех для порошковой окраски и запекания, каждая деталь отправляется в порядке общей очереди.
В цехе окраски расположено некоторое количество камер, в которых размещаются детали для запекания. Все камеры пронумерованы, нумерация начинается с единицы. На запекание детали каждой детали отводится некоторое количество секунд. Деталь располагается в свободной камере с наименьшим номером, извлечение происходит в течение 1 секунды. Если на момент прибытия детали все камеры заняты, деталь отправляется на склад.
Определите, какое количество пар деталей было окрашено (запечено в камерах) в течение дня при условии, что общее время окраски этих деталей кратно 60 (составляет целое число минут).
Входные данные. В первой строке входного файла находится натуральное число , не превышающее 1 000 000 –
количество отфрезерованных деталей. Во второй строке – натуральное число
, не превышающее 1000 – количество
покрасочных камер. Каждая из следующих
строк содержит два натуральных числа, каждое из которых не
превышает 86400: время размещения детали в камере для запекания и время извлечения (в секундах от начала
суток).
Запишите в ответе одно число: количество пар деталей, время окраски которых кратно 60.
f = open(’E:/26-27.txt’) n = int(f.readline()) k = int(f.readline()) a = sorted([list(map(int, i.split())) for i in f]) ch = [[] for i in range(k)] #список с камерами для запекания c60 = [0]*60 #подсчет количества деталей с различными остатками от деления на 60 for i in a: #перебор деталей for j in range(k): #проход по камерам для запекания в поисках свободной камеры if (not ch[j]) or (i[0] > ch[j][-1][1]): ch[j].append(i) #добавляем деталь в камеру tim = i[1]-i[0] #время запекания детали c60[tim % 60] += 1 #подсчитываем это время запекания break pair = c60[0]*(c60[0]-1) // 2 + c60[30]*(c60[30]-1) // 2 #считаем количество пар, в которых время запекания детали либо кратно 60, либо даёт остаток 30 при делении на 60 for i in range(1, 30): pair += c60[i]*c60[60-i] #считаем пары с различными остатками от деления на 60, сумма которых равна 60 print(pair)
Ошибка.
Попробуйте повторить позже
В городе открылось кафе. В нем есть столиков. После каждого клиента столик необходимо убрать, на это уходит
10 минут. Из-за большой загруженности, уборка начинается через 5 минут после того, как уходит гость. Новый клиент
может сесть через 5 минут после завершения уборки. Кафе работает с 7:00 и закрывается в 20:00. Все клиенты должны
уйти не позже 20:00. За это время в него приходит
клиентов. (Гарантируется, что они придут не раньше 7:00, а
планируют уйти не позже 20:00).
Каждого гостя при входе встречает администратор и подбирает для него стол с минимальным номером. Может
случиться так, что несколько людей придет одновременно, тогда администратор в первую очередь подбирает столик
для того, кто планирует сидеть меньшее время. В случае если все столы заняты, гость готов подождать не более 3
минут, при этом за столом он пробудет обязательно секунд (
– разница между временем прибытия и отбытия), в
этом случае выбирается столик, который освободится раньше всего. Если таких несколько, выбирается с меньшим
номером.
Определите, сколько пар клиентов смогут посетить кафе в течении дня при условии, что общее время проведенное за столиками этих клентов кратно 17.
Входные данные. На первой строке одно число – количество гостей, пришедших за день. На второй строке
одно число
– количество столиков в кафе. Далее
строк, в каждой из которых указано время, когда
клиент пришел и время, до которого он планировал пробыть в кафе (время дано в минутах от начала
дня).
f = open(’26.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 # список, симулирующий каждое столик, в котором будет записано время, в которое освободится каждое место c17 = [0]*17 #подсчет количества пассажиров с различными остатками от деления на 17 for client in clients: # проход по каждому клиенту ok = False # флаг, которые показывает нужно ли человеку ждать или нет for i in range(k): # если время прихода текущего клиента больше чем время освобождения данного места другим клиентом if client[0] >= table[i]: table[i] = client[1] + 20 # записываем время ухода текущего клиента с учётом уборки данного места после него ok = True # помечаем, что для текущего клиента нашли место tim = client[1]-client[0] #время проведенное за столиком c17[tim % 17] += 1 #подсчитываем это время за столиком break # прерываем цикл - переходим к следующему клиенту if not ok: # если клиенту нужно подождать mt = min(table) # определяем место, которое освободится в ближайшее время if client[0] + 3 >= mt: # если время ожидания не более 3 минут ind = table.index(mt) # определяем индекс данного места в списке tim = client[1] - client[0] # считаем время T if table[ind] + tim <= 1200: # если данный клиент уйдёт не позже закрытия table[ind] += tim + 20 # то сажаем данного человека за место c17[tim % 17] += 1 #подсчитываем это время за столиком # считаем количество пар, в которых время за столиками кратно 17 pair = c17[0]*(c17[0]-1) // 2 for i in range(1, 9): #считаем пары с различными остатками от деления на 17, сумма которых равна 17 pair += c17[i]*c17[17-i] print(pair)
Ошибка.
Попробуйте повторить позже
На вокзале есть камер хранения для пассажиров, которые пронумерованы с единицы. Приходя на вокзал, пассажир
кладет свои вещи в свободную камеру с минимальным номером. Известно время, когда пассажиры сдают и забирают
вещи (в минутах с начала суток). Камера доступна для багажа начиная со следующей минуты после окончания срока
хранения. В случае, когда свободных камер не находится, багаж не принимается и пассажир уходит. Если несколько
человек приходит сдавать багаж одновременно, то сначала сдает багаж тот пассажир, время выдачи багажа которого
меньше.
Определите, сколько пар пассажиров смогут сдать свой багаж в течении дня при условии, что общее время хранения багажа этих пассажиров кратно 42.
Входные данные. В первой строке входного файла находится число – количество пассажиров, сдающих багаж
(натуральное число, не превышающее 10000), во второй строке число
– количество камер хранения (натуральное
число, не превышающее 1000). Каждая из следующих
строк содержит два натуральных числа, не превышающих
1440: время сдачи багажа и время выдачи багажа.
Выходные данные. Программа должна вывести одно число: количество пар пассажиров, суммарное время хранения багажа которых кратно 42.
f = open(’2-26__674z4.txt’) n = int(f.readline()) k = int(f.readline()) a = sorted([list(map(int, i.split())) for i in f]) ch = [-1 for i in range(k)] #список с ячейками для хранения багажа c42 = [0]*42 #подсчет количества пассажиров с различными остатками от деления на 42 for i in a: #перебор пассажиров for j in range(k): #проход по ячейкам в поисках свободной if (i[0] > ch[j]): ch[j] = i[1] #добавляем багаж в ячейку tim = i[1]-i[0] #время хранения багажа c42[tim % 42] += 1 #подсчитываем это время хранения break # считаем количество пар, в которых время хранения багажа # либо кратно 42, либо даёт остаток 21 при делении на 42 pair = c42[0]*(c42[0]-1) // 2 + c42[21]*(c42[21]-1) // 2 for i in range(1, 21): #считаем пары с различными остатками от деления на 42, сумма которых равна 42 pair += c42[i]*c42[42-i] print(pair)
Ошибка.
Попробуйте повторить позже
На вокзале есть камер хранения для пассажиров, которые пронумерованы с единицы. Приходя на вокзал, пассажир
кладет свои вещи в свободную камеру с минимальным номером. Известно время, когда пассажиры сдают и забирают
вещи (в секундах с начала суток). Камера доступна для багажа начиная со следующей секунды после
окончания срока хранения. В случае, когда свободных камер не находится, багаж не принимается и пассажир
уходит.
Определите, пару пассажиров, у которых суммарное время хранения багажа максимально и кратно 31.
Входные данные. В первой строке входного файла находится число – количество пассажиров, сдающих багаж
(натуральное число, не превышающее 10000), во второй строке число
– количество камер хранения (натуральное
число, не превышающее 1000). Каждая из следующих
строк содержит два натуральных числа, не превышающих
86400: время сдачи багажа и время выдачи багажа.
Выходные данные. Программа должна вывести одно число: максимальное суммарное время хранения багажа двух пассажиров, кратное 31.
f = open(’26.txt’) n = int(f.readline()) k = int(f.readline()) a = sorted([list(map(int, i.split())) for i in f]) ch = [[] for i in range(k)] #список с ячейками для хранения багажа mx_kr_31 = -1 c31 = [0]*31 #подсчет количества пассажиров с различными остатками от деления на 31 for i in a: #перебор пассажиров for j in range(k): #проход по ячейкам в поисках свободной if (not ch[j]) or (i[0] > ch[j][-1][1]): ch[j].append(i) #добавляем багаж в ячейку tim = i[1]-i[0] #время хранения багажа if tim % 31 == 0: if tim >= mx_kr_31: c31[0] = mx_kr_31 mx_kr_31 = tim elif tim > c31[0]: c31[0] = tim elif tim > c31[tim % 31]: c31[tim % 31] = tim #подсчитываем это время хранения break mx_ans = c31[0]+mx_kr_31 for i in range(1, 16): if c31[i] + c31[31-i] > mx_ans: mx_ans = c31[i] + c31[31-i] print(mx_ans)
Ошибка.
Попробуйте повторить позже
В прачечной есть K стиральных машин, которые пронумерованы с 1. Принимаемые вещи кладутся в свободную стиральную машину с минимальным номером. Известно время, когда клиенты сдают и забирают вещи (в минутах с начала суток). Среди стиральных машин есть супер-стиральные машины, они стирают вещи в два раза быстрее. У таких машин номер кратен 3. Если время стирки было нечётным, то оно округляется в меньшую сторону. Стиралка доступна для вещей, начиная со следующей минуты, после окончания срока стирки. Если свободных машинок не находится, то вещи не принимаются в стиральную машину и клиент уходит. Если в один момент пришло несколько клиентов, то в первую очередь, вещи принимаются у того, чья стирка займет большее время (без учета использования супер-сиральных машин).
Определите количество пар клиентов, которые постирают свои вещи в супер-стиральной машине при условии, что общее время стирки (с учетом ускорения стирки) кратно 8.
Входные данные:
В первой строке входного файла находится число – количество стиральных машин, во второй строке файла
число
– количество клиентов, сдающих свои вещи (натуральное число, не превышающее 1000). Каждая из
следующих
строк содержит два натуральных числа, не превышающих 1440: время сдачи вещей и время выдачи
вещей.
Выходные данные:
Программа должна вывести одно число: количество подходящих пар клиентов.
file = open(’26.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 # симулируем стиральные машины. В каждой ячейке будет записано время освобождения определенной стиральной машины c8 = [0]*8 #подсчет количества стирок с различными остатками от деления на 8 for start,end in array_client: # перебор клиентов for i in range(len(machines)): # проход по стиральным машинам if start > machines[i]: # если текущий клиент может положить вещи в определенную стиральную машину if (i+1) % 3 == 0: # если это супер стиралка tim = (end - start) // 2 # то записываем время выполнения стирки в два раза быстрее machines[i] = start + tim c8[tim % 8] += 1 else: # если это обычная стиралка machines[i] = end # записываем время освобождения break # сбрасываем цикл - переходим к следующему клиенту # считаем количество пар, в которых время стирки # либо кратно 8, либо даёт остаток 4 при делении на 8 pair = c8[0]*(c8[0]-1) // 2 + c8[4]*(c8[4]-1) // 2 for i in range(1, 4): #считаем пары с различными остатками от деления на 8, сумма которых равна 8 pair += c8[i]*c8[8-i] print(pair)
Ошибка.
Попробуйте повторить позже
В прачечной есть K стиральных машин, которые пронумерованы с 1. Принимаемые вещи кладутся в свободную стиральную машину с минимальным номером. Известно время, когда клиенты сдают и забирают вещи (в минутах с начала суток). Среди стиральных машин есть супер-стиральные машины, они стирают вещи в 1.5 раза быстрее. У таких машин номер кратен 7. Если время стирки в супер-стиральной машине получилось не целым, то оно округляется до целого числа в меньшую сторону. Стиральная машина доступна для вещей, начиная со следующей минуты, после окончания срока стирки. Если свободных машинок не находится, то вещи не принимаются в стиральную машину и клиент уходит. Если в один момент пришло несколько клиентов, то в первую очередь, вещи принимаются у того, чья стирка займет большее время (без учета использования супер-стиральных машин).
Определите максимальное суммарное время стирки пары клиентов, таких что один клиент из пары постирал вещи в обычной машинке, а второй в супер-стиральной машине, при этом суммарное время должно быть кратно 19.
Входные данные:
В первой строке входного файла находится число – количество стиральных машин, во второй строке файла
число
– количество клиентов, сдающих свои вещи (натуральное число, не превышающее 1000). Каждая из
следующих
строк содержит два натуральных числа, не превышающих 1440: время сдачи вещей и время выдачи
вещей.
Выходные данные:
Программа должна вывести одно число: максимальное суммарное время кратное 19 подходящей пары клиентов.
file = open(’26.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 # симулируем стиральные машины. В каждой ячейке будет записано время освобождения определенной стиральной машины cs19 = [0]*19 #подсчет количества стирок с различными остатками от деления на 19 c19 = [0]*19 #подсчет количества супер-стирок с различными остатками от деления на 19 for start,end in array_client: # перебор клиентов for i in range(len(machines)): # проход по стиральным машинам if start > machines[i]: # если текущий клиент может положить вещи в определенную стиральную машину if (i+1) % 7 == 0: # если это супер стиралка tim = int((end - start) // 1.5) # то записываем время выполнения стирки в два раза быстрее machines[i] = start + tim cs19[tim % 19] = max(cs19[tim % 19], tim) else: # если это обычная стиралка machines[i] = end # записываем время освобождения tim = (end - start) # то записываем время выполнения стирки c19[tim % 19] = max(c19[tim % 19], tim) break # сбрасываем цикл - переходим к следующему клиенту # считаем максимальное суммарное время кратное 19 mx_ans = c19[0] + cs19[0] for i in range(1, 19): mx_ans = max(mx_ans, c19[i] + cs19[19-i]) print(mx_ans)
Ошибка.
Попробуйте повторить позже
На вокзале есть камер хранения для пассажиров, которые пронумерованы с единицы. Приходя на вокзал, пассажир
кладет свои вещи в свободную камеру с минимальным номером. Известно время, когда пассажиры сдают и забирают
вещи (в секундах с начала суток). Камера доступна для багажа начиная со следующей секунды после
окончания срока хранения. В случае, когда свободных камер не находится, багаж не принимается и пассажир
уходит.
Определите пару пассажиров, которым удалось оставить вещи в камерах хранения и у которых суммарное время хранения багажа максимально и кратно 47.
Входные данные. В первой строке входного файла находится число – количество пассажиров, сдающих багаж
(натуральное число, не превышающее 10000), во второй строке число
– количество камер хранения (натуральное
число, не превышающее 1000). Каждая из следующих
строк содержит два натуральных числа, не превышающих
86400: время сдачи багажа и время выдачи багажа.
Выходные данные. Программа должна вывести одно число: максимальное суммарное время хранения багажа двух пассажиров, кратное 47.
f = open(’26.txt’) n = int(f.readline()) k = int(f.readline()) a = sorted([list(map(int, i.split())) for i in f]) ch = [[] for i in range(k)] #список с ячейками для хранения багажа mx_kr_47 = -1 c47 = [-1]*47 #подсчет количества пассажиров с различными остатками от деления на 47 for i in a: #перебор пассажиров for j in range(k): #проход по ячейкам в поисках свободной if (not ch[j]) or (i[0] > ch[j][-1][1]): ch[j].append(i) #добавляем багаж в ячейку tim = i[1]-i[0] #время хранения багажа if tim % 47 == 0: if tim >= mx_kr_47: c47[0] = mx_kr_47 mx_kr_47 = tim elif tim > c47[0]: c47[0] = tim elif tim > c47[tim % 47]: c47[tim % 47] = tim #подсчитываем это время хранения break mx_ans = c47[0]+mx_kr_47 for i in range(1, 24): if c47[i] + c47[47-i] > mx_ans and c47[i] != -1 and c47[47-i] != -1: mx_ans = c47[i] + c47[47-i] print(mx_ans)
Ошибка.
Попробуйте повторить позже
Входной файл содержит заявки пассажиров, желающих сдать свой багаж в камеру хранения. В заявке указаны время сдачи багажа и время освобождения ячейки (в минутах от начала суток). Багаж одного пассажира размещается в одной свободной ячейке с минимальным номером. Ячейки пронумерованы начиная с единицы. Освобождение ячейки происходит в течение 1 мин, освобождение начинается в минуту ухода клиента. Багаж можно поместить в только что освобождённую ячейку начиная со следующей минуты. Если в момент сдачи багажа свободных ячеек нет, то пассажир уходит.
Входные данные представлены в файле следующим образом.
В первой строке входного файла находится натуральное число , не превышающее 1000, – количество ячеек в
камере хранения. Во второй строке – натуральное число
(
1000), обозначающее количество пассажиров.
Каждая из следующих
строк содержит два натуральных числа, каждое из которых не превышает 1440:
указанное в заявке время размещения багажа в ячейке и время освобождения ячейки (в минутах от начала
суток).
Требуется выбрать для каждой ячейки один багаж, который удалось оставить в данной ячейке так, чтобы сумма времени хранения всех выбранных багажей была минимальная и четная.
В ответе запишите одно число: найденную сумму.
Пример входного файла:
2
5
30 60
40 1000
59 60
61 1000
1010 1440
f = open(’26-1.txt’) k = int(f.readline()) # Kоличество ячеек n = int(f.readline()) # Kоличество пассажиров # Сортировка пассажиров по времени сдачи багажа a = sorted([list(map(int, i.split())) for i in f]) cell = [[] for i in range(k)] # Cписок ячеек for i in a: # Для каждой заявки пассажира for j in range(k): # Ищем свободную ячейку # Если ячейка пустая или успеет освободиться if (not cell[j]) or (i[0] > cell[j][-1][1]): cell[j].append(i) # Добавляем заявку в ячейку break # Останавливаем поиск # Вычисляем длительность каждого хранения багажа в ячейках t = [[j[1]-j[0] for j in i] for i in cell] s = 0 # Сумма всех длительностей mr = 1000050000 # Минимальная разница for i in t: # Проходим по каждой ячейке line = sorted(i) # Сортировка длительностей по возрастанию s += line[0] # Добавление минимальной длительности к общей сумме if len(line) > 1: # Если в ячейке больше одной длительности for j in range(1, len(line)): # Ищем минимальную нечетную разницу if (abs(line[0]-line[j]) < mr) and (abs(line[0]-line[j]) % 2 !=0): mr = abs(line[0]-line[j]) # Обновляем минимальную нечетную разницу if s % 2 != 0: s = s + mr print(s)
Ошибка.
Попробуйте повторить позже
Входной файл содержит заявки пассажиров, желающих сдать свой багаж в камеру хранения. В заявке указаны время сдачи багажа и время освобождения ячейки (в минутах от начала суток). Багаж одного пассажира размещается в одной свободной ячейке с минимальным номером. Ячейки пронумерованы начиная с единицы. Размещение багажа в ячейке или её освобождение происходит в течение 1 мин. Багаж можно поместить в только что освобождённую ячейку начиная со следующей минуты. Если в момент сдачи багажа свободных ячеек нет, то пассажир уходит.
Входные данные представлены в файле следующим образом.
В первой строке входного файла находится натуральное число , не превышающее 1000, – количество ячеек в
камере хранения. Во второй строке – натуральное число
(
1000), обозначающее количество пассажиров.
Каждая из следующих
строк содержит два натуральных числа, каждое из которых не превышает 1440:
указанное в заявке время размещения багажа в ячейке и время освобождения ячейки (в минутах от начала
суток).
Требуется выбрать для каждой ячейки один багаж, который удалось оставить в данной ячейке, чтобы сумма времени хранения всех выбранных багажей была максимальной и не кратной 13.
В ответе запишите одно число: найденную сумму.
Пример входного файла:
2
5
30 60
40 1000
59 60
61 1000
1010 1440
f = open(’26-2.txt’) k = int(f.readline()) # Kоличество ячеек n = int(f.readline()) # Kоличество пассажиров # Сортировка пассажиров по времени сдачи багажа a = sorted([list(map(int, i.split())) for i in f]) cell = [[] for i in range(k)] # Cписок ячеек for i in a: # Для каждой заявки пассажира for j in range(k): # Ищем свободную ячейку # Если ячейка пустая или успеет освободиться if (not cell[j]) or (i[0] > cell[j][-1][1]): cell[j].append(i) # Добавляем заявку в ячейку break # Останавливаем поиск # Вычисляем длительность каждого хранения багажа в ячейках t = [[j[1]-j[0] for j in i] for i in cell] s = 0 # Сумма всех длительностей mr = 1000050000 # Минимальная разница for i in t: # Проходим по каждой ячейке line = sorted(i, reverse=True) # Сортировка длительностей по убыванию s += line[0] # Добавление максимальной длительности к общей сумме if len(line) > 1: # Если в ячейке больше одной длительности for j in range(1, len(line)): # Ищем минимальную разницу не кратную 13 if (line[0]-line[j] < mr) and ((line[0]-line[j]) % 13 !=0): mr = line[0]-line[j] # Обновляем минимальную разницу if s % 13 == 0: s = s - mr print(s)
Ошибка.
Попробуйте повторить позже
На вокзале есть камер хранения для пассажиров, которые пронумерованы с единицы. Приходя на вокзал, пассажир
кладет свои вещи в свободную камеру с минимальным номером. Известно время, когда пассажиры сдают и забирают
вещи (в минутах с начала суток). Камера доступна для багажа начиная со следующей минуты после
окончания срока хранения. В случае, когда свободных камер не находится, багаж не принимается и пассажир
уходит.
Определите пару пассажиров, которым удалось оставить вещи в камерах и у которых суммарное время хранения багажа максимально и кратно 53.
Входные данные. В первой строке входного файла находится число – количество камер хранения
(натуральное число, не превышающее 1000), во второй строке число
– количество пассажиров, сдающих багаж
(натуральное число, не превышающее 10000). Каждая из следующих
строк содержит два натуральных числа, не
превышающих 1440: время сдачи багажа и время выдачи багажа.
Выходные данные. Программа должна вывести одно число: максимальное суммарное время хранения багажа двух пассажиров, кратное 53.
f = open(’26.txt’) n = int(f.readline()) k = int(f.readline()) a = sorted([list(map(int, i.split())) for i in f]) ch = [[] for i in range(k)] # Список с ячейками для хранения багажа mx_kr_53 = -1 c53 = [-1]*53 # Максимальные времена стирки пассажиров с различными остатками от деления на 53 for i in a: # Перебор пассажиров for j in range(k): # Проход по ячейкам в поисках свободной if (not ch[j]) or (i[0] > ch[j][-1][1]): ch[j].append(i) # Добавляем багаж в ячейку tim = i[1]-i[0] # Время хранения багажа if tim % 53 == 0: # Для чисел, кратных 53, сохраняем 2 максимальных числа if tim >= mx_kr_53: c53[0] = mx_kr_53 mx_kr_53 = tim elif tim > c53[0]: c53[0] = tim elif tim > c53[tim % 53]: c53[tim % 53] = tim # Подсчитываем это время хранения break # Переходим к следующему пассажиру if c53[0] != -1 and mx_kr_53 != -1: mx_ans = c53[0]+mx_kr_53 for i in range(1, 27): if c53[i] + c53[53-i] > mx_ans and c53[i] != -1 and c53[53-i] != -1: mx_ans = c53[i] + c53[53-i] print(mx_ans)