№1 · решено
Сумма дорог B–A и H–A
На рисунке схема дорог изображена в виде графа, в таблице — длины этих дорог в километрах. Таблицу и схему рисовали независимо, поэтому нумерация пунктов в таблице никак не связана с буквами на графе. Определите, какова сумма длин дорог из пункта B в пункт A и из пункта H в пункт A. В ответе запишите целое число.
| П1 | П2 | П3 | П4 | П5 | П6 | П7 | П8 | |
|---|---|---|---|---|---|---|---|---|
| П1 | 16 | 8 | ||||||
| П2 | 23 | 7 | 15 | |||||
| П3 | 19 | 26 | ||||||
| П4 | 16 | 23 | 25 | |||||
| П5 | 7 | 25 | 38 | |||||
| П6 | 19 | 38 | ||||||
| П7 | 8 | 26 | 19 | |||||
| П8 | 15 | 19 |
Источник: ФИПИ (ЕГКР 18.04.2026), № 28922
Ответвпиши то, что вывела программа
Показать разбор
- Выпиши дороги со схемы парами букв в roads, их тут 10. Проверь: в таблице столько же дорог.
- Для каждой строки таблицы запиши номера соседей в conns, а сами длины перенеси в lens, пустые клетки замени нулём.
- Перебери все расстановки букв по номерам через permutations и оставь те, где каждая дорога есть в таблице.
- В подходящей расстановке найди номера нужных букв через p.index и возьми из lens сумму длин дорог B–A и H–A.
- Расстановок может быть несколько, если схема симметричная. Складывай результат в множество: ответ у них должен быть один.
from itertools import permutations
roads = 'AB AH BC BG CD CG DF EF EG FH'.split()
conns = ['47', '458', '67', '125', '246', '35', '138', '27']
lens = [
[0, 0, 0, 16, 0, 0, 8, 0],
[0, 0, 0, 23, 7, 0, 0, 15],
[0, 0, 0, 0, 0, 19, 26, 0],
[16, 23, 0, 0, 25, 0, 0, 0],
[0, 7, 0, 25, 0, 38, 0, 0],
[0, 0, 19, 0, 38, 0, 0, 0],
[8, 0, 26, 0, 0, 0, 0, 19],
[0, 15, 0, 0, 0, 0, 19, 0],
]
ans = set()
for p in permutations('ABCDEFGH'):
if all(str(p.index(x) + 1) in conns[p.index(y)] for x, y in roads):
ans.add(lens[p.index('B')][p.index('A')] + lens[p.index('H')][p.index('A')])
print(*ans)