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

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

За­да­ние 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 = [[], []]

l, run = 0, 0

 

for k in sl:

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

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

sp[0] += [k + sl[k][0]]; l += 1

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

sp[1] += [k + sl[k][0]]; l += 1 if sl[k][1] == 'A' else 0

else:

run += 1

 

print(l, run)

 

Ответ: 717  19.

 

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

f = open('26.txt')

f.readline()

a,b,c = [],[],[]

for i in f:

x = i.split()

x[0],x[1] = int(x[0]),int(x[1])

c.append(x)

c.sort()

k3,k4 = 0,0

for i in range(len(c)):

k1,k2 = 0,0

for i1 in a:

if i1 > c[i][0]: k1 += 1

for i1 in b:

if i1 > c[i][0]: k2 += 1

if c[i][2] == 'A':

if k1 < 80:

a.append(c[i][0] + c[i][1])

k4 += 1

else:

if k2 < 20:

b.append(c[i][0] + c[i][1])

k4 += 1

else: k3 += 1

if c[i][2] == 'B':

if k2 < 20:

b.append(c[i][0] + c[i][1])

else: k3 += 1

print(k4,k3)

 

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

f=open('26.txt')

f.readline()

parking=[0]*100

auto=sorted([list(map(int,s.split()[:2]))+[s.split()[2]] for s in f],key=lambda x: x[0])

la,otkaz=0,0

for a in auto:

mesta=[i for i in range((0 if a[2]=='A' else 80),100) if parking[i]<=a[0]]

if mesta:

parking[mesta[0]]=sum(a[:2])

if a[2]=='A': la+=1

else: otkaz+=1

print(la,otkaz)


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