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

Квад­рат раз­ли­но­ван на N × N кле­ток  левая круг­лая скоб­ка 1 мень­ше N мень­ше 30 пра­вая круг­лая скоб­ка . Ис­пол­ни­тель Робот может пе­ре­ме­щать­ся по клет­кам, вы­пол­няя за одно пе­ре­ме­ще­ние одну из двух ко­манд: впра­во или вниз. По ко­ман­де впра­во Робот пе­ре­ме­ща­ет­ся в со­сед­нюю пра­вую клет­ку, по ко­ман­де вниз  — в со­сед­нюю ниж­нюю.

Квад­рат огра­ни­чен внеш­ни­ми сте­на­ми. Между со­сед­ни­ми клет­ка­ми квад­ра­та также могут быть внут­рен­ние стены. Сквозь стену Робот прой­ти не может.

Перед каж­дым за­пус­ком Ро­бо­та в каж­дой клет­ке квад­ра­та лежит мо­не­та до­сто­ин­ством от 1 до 100. По­се­тив клет­ку, Робот за­би­ра­ет мо­не­ту с собой; это также от­но­сит­ся к на­чаль­ной и ко­неч­ной клет­кам марш­ру­та Ро­бо­та. В «уг­ло­вых» клет­ках поля  — тех, ко­то­рые спра­ва и снизу огра­ни­че­ны сте­на­ми, Робот не может про­дол­жать дви­же­ние, по­это­му на­коп­лен­ная сумма счи­та­ет­ся ито­го­вой. Таких ко­неч­ных кле­ток на поле может быть не­сколь­ко, вклю­чая пра­вую ниж­нюю клет­ку поля. При раз­ных за­пус­ках ито­го­вые на­коп­лен­ные суммы могут раз­ли­чать­ся.

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

Ис­ход­ные дан­ные пред­став­ля­ют собой элек­трон­ную таб­ли­цу раз­ме­ром N × N, каж­дая ячей­ка ко­то­рой со­от­вет­ству­ет клет­ке квад­ра­та. Внут­рен­ние и внеш­ние стены обо­зна­че­ны утолщёнными ли­ни­я­ми.

За­да­ние 18

При­мер вход­ных дан­ных

1572
102113
3869
54102

Для та­ко­го ла­би­рин­та ответ будет 42 16.

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

Ре­ше­ние.

Файл с по­стро­ен­ной кар­той: 18_age.txt

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

# Для ре­ше­ния этого за­да­ния, нужно по­стро­ить карту по ко­то­рой будет хо­дить ре­кур­сив­ный робот.

# Ко­пи­ру­ем таб­ли­цу из файла в тек­сто­вый до­ку­мент, далее стро­им стен­ки: R - огра­ни­че­ние на пе­ре­ме­ще­ние впра­во,

# D - огра­ни­че­ние не пе­ре­ме­ще­ние вниз, RD - тупик (угол об­ра­зо­ван­ный стен­ка­ми)

 

import re; from functools import cache

@cache

def bot(s, d, r, z):

if z == 'RD': global k; k += [s]

0 if 'R' in z else bot(s+y(d, r+1)[0], d, r+1, y(d, r+1)[1])

0 if 'D' in z else bot(s+y(d+1, r)[0], d+1, r, y(d+1, r)[1])

f = list(map(lambda x: x.split(), open('18_age.txt').readlines()))

y = lambda i0, i1: [int(re.sub(r'[A-Z]', '', f[i0][i1])), re.sub(r'\d', '', f[i0][i1])]

k = []

bot(int(f[0][0]), 0, 0, '')

print(max(k), min(k))

 

Ответ: 2538 630.


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

Источник: Проб­ный ЕГЭ Санкт-Пе­тер­бург, 20.02.2025. Ва­ри­ант 1