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

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

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

За­да­ние 26

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

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

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

 

Ответ:

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

Ре­ше­ние.

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

f = open('26.txt')

N = int(f.readline())

a=[]

b=[]

for i in f:

start, end = map(str, i.split())

if start=='A':

a.append(int(end))

else:

b.append(int(end))

a.sort(reverse=True)

b.sort(reverse=True)

numa = 0

numb = 0

izdelie = 0

prib = []

 

while len(a) > numa and len(b) > numb:

if abs(a[numa] - b[numb]) > 20:

if a[numa] > b[numb]:

numa += 1

else:

numb += 1

else:

izdelie += 1

prib.append(a[numa] + b[numb])

numa += 1

numb += 1

print(izdelie, sum(prib))

 

Ответ: 5669; 29011899.

 

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

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

a,b,izdel = [],[],[] # де­та­ли A, де­та­ли B, из­де­лия

for x in det: (a if x[0] == 'A' else b).append(int(x[1]))

a.sort()

b.sort()

while a and b: # пока оба спис­ка A и B не пу­стые

while (a and b) and abs(a[-1] - b[-1]) > 20:

(a if a[-1] > b[-1] else b).pop()

if a and b: izdel.append(a.pop() + b.pop()) # до­бав­ля­ем из­де­лие

print(len(izdel),sum(izdel))