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

В пер­вой стро­ке по­да­ют­ся два на­ту­раль­ных числа: N  — ко­ли­че­ство на­ту­раль­ных чисел в по­сле­до­ва­тель­но­сти и K  — ми­ни­маль­ное рас­сто­я­ние, до­пу­сти­мое между лю­бы­ми двумя эле­мен­та­ми.

Тре­бу­ет­ся найти ми­ни­маль­ное зна­че­ние про­из­ве­де­ния трой­ки эле­мен­тов так, что между лю­бы­ми эле­мен­та­ми трой­ки рас­сто­я­ние между двумя эле­мен­та­ми не менее K (то есть раз­ность их ин­дек­сов по мо­ду­лю боль­ше или равна K).

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

Файл А

Файл В

 

 

Ответ:

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

Ре­ше­ние.

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

f = open('27.txt')

k = int(f.readline())

n = int(f.readline())

a = [int(x) for x in f]

st = 10**10

fin = 10**10

pr = 10**10

for i in range(2*k,n):

st = min(st, a[i-2*k])

fin = min(fin, st * a[i-k])

pr = min(pr, fin * a[i])

print(pr)

 

В ре­зуль­та­те ра­бо­ты дан­но­го ал­го­рит­ма при вводе дан­ных из файла A ответ  — 12, из файла B  — 84.

 

Ответ: 12  84.

 

При­ме­ча­ние.

Путь к файлу не­об­хо­ди­мо ука­зать со­глас­но рас­по­ло­же­нию файла на Вашем ком­пью­те­ре.

 

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

f = open('1_27_A.txt')

k = int(f.readline())

f.readline()

a = [int(i) for i in f]

b = [[j,a[j]] for j in range(len(a))]

b.sort(key = lambda x: x[1])

min1 = 10**10

rr = 3

# на­чи­на­ем рас­ши­рять диа­па­зон пе­ре­би­ра­е­мых зна­че­ний (то есть за­хва­ты­ва­ем не весь диа­па­зон, а толь­ко пер­вые 4 эле­мен­та, чтобы умень­шить время по­ис­ка)

while b[0][1] * b[1][1] * b[rr+1][1] < min1:

# если про­из­ве­де­ние двух пер­вых наи­мень­ших эле­мен­тов и «после гра­нич­но­го»

# эле­мен­та ока­жет­ся мень­ше ми­ни­маль­ной трой­ки эле­мен­тов, то это зна­чит

# что даль­ней­шие рас­ши­ре­ние диа­па­зо­на по­ис­ка не имеет смыс­ла, все осталь­ные най­ден­ные трой­ки

# будут боль­ше най­ден­ной ми­ни­маль­ной

rr += 1

for i1 in range(rr):

for i2 in range(i1+1,rr+1):

for i3 in range(i2+1,rr+2):

if abs(b[i1][0] - b[i2][0]) >= k and abs(b[i1][0] - b[i3][0]) >= k and abs(b[i2][0] - b[i3][0])>= k:

min1 = min(min1,b[i1][1] * b[i2][1] * b[i3][1])

print(min1)


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

Источник: ЕГЭ по ин­фор­ма­ти­ке 19.06.2023. Ос­нов­ная волна. Даль­ний Во­сток