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

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

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

За­да­ние 26

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

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

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

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

 

Ответ:

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

Ре­ше­ние.

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

count += 1

elif len(okno_1) < 12:

okno_1.append(okno_1[-1] + dlitel)

count +=1

else:

usli += 1

else:

if okno_2 == []:

okno_2.append(prixod + dlitel)

elif len(okno_2) < 12:

okno_2.append(okno_2[-1] + dlitel)

else:

usli += 1

print(count, usli)

 

Ответ: 118 467.

 

При­ведём ре­ше­ние Юрия Кра­силь­ни­ко­ва на языке Python.

a = sorted([list(map(int,s.split())) for s in open('26.txt')][1:])

q = [0,[],[]] # оче­ре­ди в окно 1 и окно 2

k = [0]*3 # k[i] - ко­ли­че­ство об­слу­жен­ных в окне i (i = 0 - не­об­слу­жен­ные)

for x in a:

for i in range(1,3): # уда­ля­ем уже об­слу­жен­ных

while q[i] and q[i][0] <= x[0]:

del q[i][0]

w = x[2] if x[2] > 0 else (1 if len(q[1]) <= len(q[2]) else 2) # вы­би­ра­ем окно

if len(q[w]) >= 12: k[0] += 1 # кли­ент ухо­дит

else: # кли­ент ста­но­вит­ся в оче­редь

t = q[w][-1] if q[w] else x[0] # время, когда кли­ен­та нач­нут об­слу­жи­вать

q[w].append(t + x[1]) # время, когда кли­ент уйдёт

k[w] += 1 # ко­ли­че­ство кли­ен­тов, об­слу­жен­ных в окне

print(k[1],k[0])


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