Задания
Версия для печати и копирования в MS Word
Тип 26 № 63075
i

В от­де­ле­нии банка ра­бо­та­ют два окна для об­слу­жи­ва­ния кли­ен­тов. Не­ко­то­рые услу­ги могут быть ока­за­ны толь­ко при об­ра­ще­нии в опре­делённое окно, не­ко­то­рые  — при об­ра­ще­нии в любое окно. Кли­ент вхо­дит в от­де­ле­ние и встаёт в оче­редь к тому окну, ко­то­рое ока­зы­ва­ет не­об­хо­ди­мую ему услу­гу. Если услу­га может быть ока­за­на в любом окне, кли­ент вы­би­ра­ет то, в оче­ре­ди к ко­то­ро­му в дан­ный мо­мент мень­ше людей. Если оче­ре­ди в оба окна оди­на­ко­вые, кли­ент вы­би­ра­ет окно с мень­шим но­ме­ром. При этом если в оче­ре­ди к вы­бран­но­му окну уже стоит 14 или более че­ло­век (вклю­чая че­ло­ве­ка, ко­то­ро­го об­слу­жи­ва­ют в дан­ный мо­мент), при­шед­ший кли­ент сразу ухо­дит.

Если мо­мент за­вер­ше­ния об­слу­жи­ва­ния од­но­го или не­сколь­ких кли­ен­тов сов­па­да­ет с мо­мен­том при­хо­да но­во­го кли­ен­та, то можно счи­тать, что новый кли­ент пришёл после того, как об­слу­жи­ва­ние ранее при­шед­ше­го кли­ен­та за­вер­ши­лось и оче­редь со­кра­ти­лась.

За­да­ние 26

Вход­ные дан­ные.

Пер­вая стро­ка вход­но­го файла со­дер­жит целое число N (N ≤ 1000)  — общее ко­ли­че­ство кли­ен­тов, при­шед­ших в от­де­ле­ние за один ра­бо­чий день. Каж­дая из сле­ду­ю­щих N строк опи­сы­ва­ет од­но­го кли­ен­та и со­дер­жит 3 целых числа: время при­хо­да кли­ен­та в от­де­ле­ние (ко­ли­че­ство минут с на­ча­ла ра­бо­че­го дня), время, не­об­хо­ди­мое для об­слу­жи­ва­ния дан­но­го кли­ен­та, и номер окна, в ко­то­рое ему не­об­хо­ди­мо об­ра­тить­ся (0 озна­ча­ет, что кли­ент может об­ра­тить­ся в любое окно). Га­ран­ти­ру­ет­ся, что ни­ка­кие два кли­ен­та не при­хо­дят од­но­вре­мен­но.

Опре­де­ли­те, сколь­ко кли­ен­тов будет об­слу­же­но в те­че­ние дня в окне номер 2 и сколь­ко кли­ен­тов по­ки­нет от­де­ле­ние из-⁠за слиш­ком боль­ших оче­ре­дей.

В от­ве­те за­пи­ши­те два целых числа: сна­ча­ла ко­ли­че­ство кли­ен­тов, об­слу­жен­ных в окне номер 2, затем ко­ли­че­ство не­об­слу­жен­ных кли­ен­тов.

 

Ответ:

Спрятать решение

Ре­ше­ние.

При­ве­дем ре­ше­ние на языке 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])


Аналоги к заданию № 63042: 63075 Все