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

Робот стоит в левом ниж­нем углу пря­мо­уголь­но­го поля, в каж­дой клет­ке ко­то­ро­го за­пи­са­но целое число. В не­ко­то­рых клет­ках за­пи­са­но число −1, в эти клет­ки ро­бо­ту за­хо­дить нель­зя. Для ва­ше­го удоб­ства такие клет­ки вы­де­ле­ны тёмным фоном. В осталь­ных клет­ках за­пи­са­ны по­ло­жи­тель­ные числа.

За один ход робот может пе­ре­ме­стить­ся на одну клет­ку впра­во или на одну клет­ку вверх. Клет­ка, из ко­то­рой робот не может сде­лать до­пу­сти­мо­го хода (спра­ва и свер­ху на­хо­дят­ся гра­ни­цы поля или за­прещённые клет­ки), на­зы­ва­ет­ся фи­наль­ной. На поле может быть не­сколь­ко фи­наль­ных кле­ток.

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

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

 

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

 

За­да­ние 2. Опре­де­ли­те ми­ни­маль­ный на­чаль­ный запас энер­гии, ко­то­рый поз­во­лит ро­бо­ту прой­ти любым до­пу­сти­мым марш­ру­том.

 

Ис­ход­ные дан­ные за­пи­са­ны в элек­трон­ной таб­ли­це. В от­ве­те за­пи­ши­те два числа: сна­ча­ла ответ на за­да­ние 1, затем ответ на за­да­ние 2.

За­да­ние 18

Ответ:

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

Ре­ше­ние.

По­стро­ен­ная карта для ро­бо­та в txt фор­ма­те: карта к 18 txt.txt

 

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

import re; from functools import cache

 

@cache

def bot(s, h, p, z):

if z in ['QA','QB','QC', 'QD']:

global QA, QB, QC, QD

if z == 'QA': QA += [s]

if z == 'QB': QB += [s]

if z == 'QC': QC += [s]

if z == 'QD': QD += [s]

return 1

bot(s+abs(y(h, p)[0] - y(h-1, p)[0]), h-1, p, y(h-1, p)[1]) if z != 'H' else 0

bot(s+abs(y(h, p)[0] - y(h, p+1)[0]), h, p+1, y(h, p+1)[1]) if z != 'P' else 0

 

f = list(map(lambda x: x.split(), open('карта к 18 txt.txt').readlines()))

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

QA, QB, QC, QD = [], [], [], []; bot(int(f[len(f)-1][0]), len(f)-1, 0, 0)

print(max(min(_) for _ in (QA, QB, QC, QD)), max(QA + QB + QC + QD))

 

Ответ: 719; 2052.


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

Источник: Стат­Град: Тре­ни­ро­воч­ная ра­бо­та 28.01.2025 ИН2410302