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

На пар­ков­ке име­ет­ся 70 мест для лег­ко­вых ав­то­мо­би­лей и 30 мест для мик­ро­ав­то­бу­сов. При­ез­жа­ю­щий на пар­ков­ку ав­то­мо­биль за­ни­ма­ет любое сво­бод­ное место со­от­вет­ству­ю­ще­го типа. При этом если сво­бод­ных мест для лег­ко­вых ав­то­мо­би­лей нет, то лег­ко­вой ав­то­мо­биль за­ни­ма­ет сво­бод­ное место, пред­на­зна­чен­ное для мик­ро­ав­то­бу­са, но мик­ро­ав­то­бус не может за­нять место, пред­на­зна­чен­ное для лег­ко­во­го ав­то­мо­би­ля. Если под­хо­дя­ще­го места нет, ав­то­мо­биль уез­жа­ет.

За­да­ние 26

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

Пер­вая стро­ка вход­но­го файла со­дер­жит целое число N  — общее ко­ли­че­ство ав­то­мо­би­лей, в те­че­ние суток при­е­хав­ших на пар­ков­ку. Каж­дая из сле­ду­ю­щих N строк опи­сы­ва­ет один ав­то­мо­биль и со­дер­жит 2 целых числа и букву. Пер­вое число озна­ча­ет время в ми­ну­тах с на­ча­ла суток, когда ав­то­мо­биль при­был на пар­ков­ку, вто­рое  — не­об­хо­ди­мую дли­тель­ность сто­ян­ки в ми­ну­тах. Буква озна­ча­ет тип ав­то­мо­би­ля: A  — лег­ко­вой, B  — мик­ро­ав­то­бус.

Га­ран­ти­ру­ет­ся, что ни­ка­кие два ав­то­мо­би­ля не при­ез­жа­ют од­но­вре­мен­но. Если время при­бы­тия ав­то­мо­би­ля сов­па­да­ет со вре­ме­нем окон­ча­ния сто­ян­ки дру­го­го ав­то­мо­би­ля, вновь при­быв­ший ав­то­мо­биль может за­нять осво­бо­див­ше­е­ся место, если оно под­хо­дит ему по типу. В от­ве­те за­пи­ши­те два целых числа: сна­ча­ла ко­ли­че­ство мик­ро­ав­то­бу­сов, ко­то­рые смо­гут при­пар­ко­вать­ся, затем  — общее ко­ли­че­ство ав­то­мо­би­лей (как лег­ко­вых, так и мик­ро­ав­то­бу­сов), ко­то­рые уедут из-⁠за от­сут­ствия мест.

 

Ответ:

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

Ре­ше­ние.

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

f = list(map(lambda x: x.split(), open('26.txt').readlines()[1:]))

sl = dict(sorted({int(i[0]): [int(i[1]), i[2]] for i in f}.items()))

sp = [[], []]

m, run = 0, 0

 

for k in sl:

sp = [list(filter(lambda x: x > k, x)) for x in sp]

if len(sp[0]) != 70 and sl[k][1] == 'A':

sp[0] += [k + sl[k][0]]

elif len(sp[1]) != 30:

sp[1] += [k + sl[k][0]]; m += 1 if sl[k][1] == 'B' else 0

else:

run += 1

 

print(m, run)

 

Ответ: 168  6.

 

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

a = [s.split() for s in open('26.txt')][1:]

a = sorted([[int(x[0]),int(x[1]),x[2]] for x in a])

p = [0]*100

m,b = 0,0

for auto in a:

f=[i for i in range(0 if auto[2]=='A' else 70,100) if p[i]<=auto[0]]

if len(f)>0:

p[f[0]]=auto[0]+auto[1]

if auto[2]=='B':

m += 1

else:

b += 1

print(m,b)


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