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

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

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

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

За­да­ние 26

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

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

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

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

 

Ответ:

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

Ре­ше­ние.

При­ве­дем ре­ше­ние на языке Python.

f = open('26.txt')

n = int(f.readline())

a = [list(map(int,s.split())) for s in f]

a.sort()

ne_obslug = 0

free = [0]*10

obslug = [0]*10

for start, time, okno in a:

if start + 40 >= free[okno]:

obslug[okno] += 1

free[okno] = time + max (start, free[okno])

else:

ne_obslug += 1

print(max(obslug), ne_obslug)

 

Ответ: 115 225.

 

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

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

okno,kol = [0]*7,[0]*7

for x in a:

if okno[x[2]] - x[0] <= 40:

okno[x[2]] = max(okno[x[2]], x[0]) + x[1]

kol[x[2]] += 1

else: kol[0] += 1

print(max(kol[1:]), kol[0])


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