В отделении банка работают два окна для обслуживания клиентов. Некоторые услуги могут быть оказаны только при обращении в определённое окно, некоторые — при обращении в любое окно. Клиент входит в отделение и встаёт в очередь к тому окну, которое оказывает необходимую ему услугу. Если услуга может быть оказана в любом окне, клиент выбирает то, в очереди к которому в данный момент меньше людей. Если очереди в оба окна одинаковые, клиент выбирает окно с меньшим номером. При этом если в очереди к выбранному окну уже стоит
Если момент завершения обслуживания одного или нескольких клиентов совпадает с моментом прихода нового клиента, то можно считать, что новый клиент пришёл после того, как обслуживание ранее пришедшего клиента завершилось и очередь сократилась.
Входные данные.
Первая строка входного файла содержит целое число N (N ≤ 1000) — общее количество клиентов, пришедших в отделение за один рабочий день. Каждая из следующих
Определите, сколько клиентов будет обслужено в течение дня в окне
В ответе запишите два целых числа: сначала количество клиентов, обслуженных в окне
Ответ:
Приведем решение на языке Python.
f = open('26.txt')
n = int(f.readline())
a = []
for i in f:
prixod, dlitel, N_okna = [int(x) for x in i.split()]
a.append([prixod, dlitel, N_okna])
a.sort()
okno_1 = []
okno_2 = []
count = 0
usli = 0
for prixod, dlitel, N_okna in a:
while len(okno_1) > 0 and okno_1[0] <= prixod:
del okno_1[0]
while len(okno_2) > 0 and okno_2[0] <= prixod:
del okno_2[0]
if N_okna == 1 or (N_okna != 1 and N_okna != 2 and len(okno_1) <= len(okno_2)):
if okno_1 == []:
okno_1.append(prixod + dlitel)
elif len(okno_1) < 14:
okno_1.append(okno_1[-1] + dlitel)
else:
usli += 1
else:
if okno_2 == []:
count += 1
okno_2.append(prixod + dlitel)
elif len(okno_2) < 14:
okno_2.append(okno_2[-1] + dlitel)
count += 1
else:
usli += 1
print(count, usli)
Ответ: 126 469.
Приведем решение Юрия Красильникова на языке Python.
clients = sorted([list(map(int,s.split())) for s in open('26.txt').readlines()[1:]])
q = [[],[],[]]
cwin = [0,0,0]
for cl in clients:
for win in range(1,3):
while len(q[win]) > 0 and q[win][0] <= cl[0]: del q[win][0]
win=cl[2] if cl[2] != 0 else (1 if len(q[1]) <= len(q[2]) else 2)
if len(q[win]) >= 14:
cwin[0] += 1
else:
q[win].append((cl[0] if len(q[win]) == 0 else q[win][-1])+cl[1])
cwin[win] += 1
print(cwin[2],cwin[0])

