Муниципальный этап, 9–11 классы всероссийской олимпиады по информатике: 5 задач с официальным разбором, к каждой наше решение на C++.

К задаче 1

Муниципальный этап ВсОШ по информатике 2025/26, 9–11 классы.

Задачи тура

Отмечайте решённые: 0 из 5

1. Большой квадрат

1 секунда, математика, геометрия

Даны два прямоугольника размера и . Можно соединить их вместе, приложив сторону одного прямоугольника к стороне другого и склеив место соединения. Прямоугольники можно поворачивать перед склеиванием. После этого из полученной фигуры нужно вырезать квадрат со сторонами, параллельными сторонам прямоугольника. Определите максимальное возможное значение стороны квадрата.

На рисунке изображены два прямоугольника со сторонами и , из которых можно вырезать квадрат со стороной 5 (заштрихован).

Два прямоугольника и квадрат 5×5
Два прямоугольника и квадрат 5×5

Формат входных данных

Программа получает на вход натуральные числа , , , , каждое в отдельной строке — стороны первого и второго прямоугольников. Все числа не превосходят .

Формат выходных данных

Программа должна вывести одно целое число — максимальную возможную сторону квадрата.

стандартный вводстандартный вывод
6
2
3
8
5
Официальный разборСначала попробуйте решить сами
Наше решение на C++Полный код на C++17

2. План эвакуации

1 секунда, реализация, манхэттенское расстояние

Этаж здания представляет собой прямоугольник из квадратных комнат. Из каждой комнаты есть проходы в соседние комнаты. В двух комнатах находятся лестницы. Необходимо разработать план эвакуации — указать для каждой комнаты направление движения в одну из соседних комнат так, чтобы, передвигаясь по комнатам только в указанных направлениях, можно было бы достичь одной из двух лестниц, пройдя минимальное расстояние.

На рисунке изображён возможный план эвакуации для примера из условия. Комнаты с лестницами обозначены звёздочками.

План эвакуации для примера
План эвакуации для примера

Формат входных данных

Первая строка входных данных содержит число — количество строк в плане эвакуации, . Вторая строка входных данных содержит число — количество столбцов в плане эвакуации, . Следующие две строки содержат числа и — номера строки и столбца комнаты, в которой находится первая лестница, , . Следующие две строки содержат числа и — номера строки и столбца комнаты, в которой находится вторая лестница, , . Гарантируется, что или . Строки нумеруются сверху вниз числами от 1 до , столбцы нумеруются слева направо числами от 1 до .

Формат выходных данных

Программа должна вывести строк, каждая строка должна содержать символов. Каждый символ соответствует одной комнате. В двух комнатах с лестницами должен находиться символ «S» (прописная английская буква). В остальных комнатах находятся символы, указывающие направление движения:

  • «<» (символ «меньше») — налево.
  • «>» (символ «больше») — направо.
  • «^» (символ находится на клавише «6») — вверх.
  • «v» (строчная английская буква) — вниз.

Никакие другие символы, например, пробелы, выводить не нужно. Вы можете вывести любой подходящий план эвакуации.

Замечание

Решения, правильно работающие, когда , будут оцениваться в 20 баллов.

Решения, правильно работающие, когда , будут оцениваться в 20 баллов.

Решения, правильно работающие, когда лестницы находятся в двух противоположных углах здания, будут оцениваться в 20 баллов.

стандартный вводстандартный вывод
3
5
1
2
2
4
>S<v<
>^>S<
>^>^<
Официальный разборСначала попробуйте решить сами
Наше решение на C++Полный код на C++17

3. Аркадий Аркадьевич делает грядки

1 секунда, сортировка, жадный алгоритм

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

Для того чтобы собрать прямоугольную грядку, нужны 4 доски. В идеале это должны быть две пары досок равной длины, тогда из них можно сложить ровный прямоугольник. Но если доски имеют неравную длину, то в одном из углов полученной грядки можно разместить пластиковый уголок: две планки длины , скреплённые под прямым углом. Уголок со стороной позволит увеличить длины двух досок на величину, не превосходящую . Если противоположными сторонами грядки будут доски длины и , а также и соответственно, то для того чтобы сделать прямоугольную грядку из этих досок, понадобится уголок размера . Например, чтобы сделать грядку из досок длины 5, 7, 3, 2, понадобится уголок размера 2. На рисунке чёрным цветом изображены доски и красным цветом изображён уголок.

Грядка из досок разной длины
Грядка из досок разной длины

В сарае у Аркадия Аркадьевича нашлись досок, -я из которых имеет длину . Теперь он хочет выбрать из них четыре и сложить из них грядку таким образом, чтобы использовать уголок наименьшего размера. Помогите ему.

Формат входных данных

Первая строка входных данных содержит число () — количество досок в сарае у Аркадия Аркадьевича.

Следующие строк содержат числа () — длины досок.

Формат выходных данных

Программа должна сначала вывести число — минимально возможный размер уголка.

Во второй строке выведите 4 числа , , , — длины досок, которые необходимо выбрать для грядки. При этом противоположными сторонами прямоугольника будут доски и , а также и . Если есть разные варианты выбора досок для грядки с одной и той же величиной уголка, можно вывести любой из них.

Система оценки

Решения, правильно работающие, когда , будут оцениваться в 20 баллов.

Решения, правильно работающие, когда , будут оцениваться в 45 баллов.

Решения, правильно работающие, когда , будут оцениваться в 65 баллов.

Решения, правильно работающие, когда все , будут оцениваться в 10 баллов.

стандартный вводстандартный вывод
6
5
9
12
3
7
2
2
2 3 5 7
стандартный вводстандартный вывод
6
1
7
3
6
3
8
1
3 3 6 7
Официальный разборСначала попробуйте решить сами
Наше решение на C++Полный код на C++17

4. Гравитационная сортировка

2 секунды, моделирование, префиксные суммы, подсчёт

Алгоритм гравитационной сортировки позволяет упорядочить массив целых неотрицательных чисел. Для сортировки чисел используется набор стержней и бусинок. Рассмотрим алгоритм сортировки массива целых неотрицательных чисел . Если данные числа могут достигать значения , нужно использовать стержней и бусинок. Наденем по одной бусинке на самые левые стержней, они представляют значение . Затем наденем по одной бусинке на самые левые стержней, разместив их во втором ряду, над первым рядом бусинок. При этом, если , то некоторые бусинки второго ряда окажутся как бы висящими в воздухе, они не будут опираться на бусинки нижнего ряда. Затем на самых левых стержнях в третьем ряду разместим бусинок, часть из них также может не опираться ни на какие предыдущие бусинки и т.д. После того, как все бусинки будут размещены, они начинают двигаться по стержням вниз. Когда движение завершится, количество бусинок в каждом ряду будет равно значениям упорядоченного массива.

Будем считать, что все бусинки двигаются одновременно. За секунду одна бусинка сползает на один ряд вниз, если в ряду ниже пусто или находится бусинка, которая также спускается вниз. На рисунках показано начальное расположение бусинок для массива и состояние через 1, 2 и 3 секунды.

Бусинки на стержнях по секундам
Бусинки на стержнях по секундам

Для каждого стержня определите время, необходимое для того, чтобы на этом стержне все бусинки закончили движение. В данном примере на первом стержне бусинки будут неподвижны, на втором стержне они закончат движение через одну секунду, на третьем и четвёртом стержнях — через две секунды, на пятом стержне — через три секунды.

Формат входных данных

Первая строка входных данных содержит число () — количество сортируемых чисел и количество стержней (то есть максимальное значение одного числа). Следующие строк содержат по одному числу () — значения упорядочиваемых чисел (начальные значения числа бусинок в каждом ряду).

Формат выходных данных

Для каждого из стержней слева направо программа должна вывести одно число — количество секунд, через которое на данном стержне бусинки прекратят движение.

Система оценки

Решения, правильно работающие при , будут оцениваться в 30 баллов.

Решения, правильно работающие при , будут оцениваться в 60 баллов.

стандартный вводстандартный вывод
5
2
4
1
5
3
0
1
2
2
3
Официальный разборСначала попробуйте решить сами
Наше решение на C++Полный код на C++17

5. Шифр mint

1 секунда, жадный алгоритм, строки, подсчёт

Многие старейшие шифры основаны на замене букв на числа, например, в шифре A1Z26 каждая буква заменяется на её порядковый номер в алфавите. Вдохновившись этой идеей, первоклассник Петя решил придумать свой шифр-замену. Он хочет каждую букву от «A» до «R» (первые 18 букв латинского алфавита) заменять на одно из чисел 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 40, 50, 60, 70, 80, 90. Числа выбраны так, чтобы при дешифровке легко разделить последовательность цифр на коды букв, причём весь алфавит Петя не смог использовать, ибо сотни он ещё не узнал.

Если применить один из таких шифров к строке, он получит натуральное число. Если использовать разные шифры, удовлетворяющие условию, то будут получаться разные числа.

Пете интересно, какое наименьшее число может быть шифром заданной строки. К сожалению, сравнивать длинные числа слишком сложная задача для первоклассника, поэтому он просит вас написать программу, шифрующую заданное слово минимальным числом.

Формат входных данных

Программа получает на вход непустую строку , состоящую из прописных букв латинского алфавита от «A» до «R», длина строки не превышает 1000 символов.

Формат выходных данных

Программа должна вывести одно число — шифр строки . Обратите внимание, число может быть длинным.

Система оценки

Решения, правильно работающие, когда строка состоит не более чем из 4 символов, будут оцениваться в 20 баллов.

Решения, правильно работающие, когда строка состоит из букв «A» и «B», будут оцениваться в 20 баллов.

Решения, правильно работающие, когда строка состоит из букв от «A» до «I», будут оцениваться в 44 балла.

стандартный вводстандартный вывод
REGION
123456
стандартный вводстандартный вывод
OLIMPIADA
123453676
стандартный вводстандартный вывод
CONFIRMABLE
1012023456789
Официальный разборСначала попробуйте решить сами
Наше решение на C++Полный код на C++17

Сначала решите сами

Возьмите столько времени, сколько было на олимпиаде, и только потом открывайте разбор.

Готовиться самому

Платформа с задачами

1400+ задач с автопроверкой

или
Пробное занятие

Призёр ВсОШ, первое бесплатно