В школьной столовой всего есть 270 посадочных мест. Места делятся на две категории: для сотрудников школы и для детей. Для сотрудников школы выделено 20 мест, для детей — 250. Сотрудник школы может занять любое место в своей категории, при этом, если все места заняты, он может пересесть на место для детей. Однако ребенок не может сесть на место, предназначенное для сотрудника школы. Занять место можно одновременно с его освобождением – в ту же минуту. Если человек не находит себе свободного места, он уходит из столовой голодный.
Входные данные.
Первая строка входного файла содержит целое число N – общее количество людей в школе, которые за учебный день придут в столовую. Каждая из следующих N строк описывает человека и содержит 2 целых числа и букву. Первое число означает время в минутах с начала суток, когда человек пришёл в столовую, второе – необходимую длительность обеда в минутах. Буква означает тип человека: A – ребенок, B – сотрудник школы.
Гарантируется, что одновременно два человека не может прийти в столовую.
В ответе запишите два целых числа: сначала количество человек, которые смогут пообедать, затем – общее количество человек, которые уйдут из-за отсутствия мест.
file = open(’26_7__1vv36.txt’)
# считываем количество людей в файле
count_people = int(file.readline())
peoples = [] # список, в котором будут записаны люди
for i in range(count_people):
start,duration,type = file.readline().split() # считываем текущую строку
start,duration = int(start),int(duration) # переводим в число время прихода и длительность обеда
# используем функцию ord для перевода буквы в число и проверяем равно ли 0. А станет 1, а В станет 0. Это сделано для удобства дальнейшего обращения со списком
type = (ord(type) % 65) == 0
peoples.append([start,duration,type])
# симулируем столовую. 20 мест для учителей, 250 мест - для детей
places = [[-1 for i in range(20)],[-1 for i in range(250)]]
count = 0
# перебор людей
for start,duration,category in peoples:
ok = False # флаг, который указывает нашли ли место для человека или нет
# перебор категории посадочных мест
for cat in range(category,2):
# перебор посадочных мест определенной категории
for i in range(len(places[cat])):
# если время прихода больше времени освобождения человеком, который уже занял данное место
if start > places[cat][i]:
places[cat][i] = start + duration # то записываем время освобождения места текущим человеком
count += 1 # увеличиваем счётчик
ok = True # отмечаем, что нашли место для человека
break # сбрасываем цикл
if ok: # если для текущего человека нашли место
break # то сбрасываем цикл и переходим к следующему человеку
print(count,count_people - count)