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

К задаче 1

Школьный этап ВсОШ по информатике 2026/27, 9–11 классы.

Сириус, первая группа регионов, 20 октября 2026Условия PDFРазбор PDF

Задачи тура

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

1. Доставка в Простоквашино

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

Недавно почтальон Печкин прочитал в газете о новых роботах-доставщиках и решил использовать одного из них для развоза почты. Он планирует внедрять данную инновацию в деревне Простоквашино, которую можно представить как длинную улицу: в начале — отделение почты, за ним — жилые дома, расположенные в ряд на равном расстоянии друг от друга.

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

В качестве «тестового задания» Печкин хочет доставить с помощью робота журнал «Мурзилка» дяде Фёдору, который живет в -м по счёту от почты доме. Теперь ему предстоит выяснить, на какое минимальное число единиц энергии ему необходимо изначально зарядить робота, чтобы тот мог доехать от почты до дома дяди Фёдора.

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

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

Во второй строке содержится целое число () — количество энергии, на которое робот может зарядиться у каждого дома.

В третьей строке содержится целое число () — номер (по счёту от здания почты) дома дяди Фёдора.

Гарантируется, что .

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

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

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

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

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

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

Замечание

В первом примере из условия достаточно зарядить робота на 6 единиц энергии. На дорогу до первого дома он потратит 2 единицы, и у первого дома он зарядится на 1 единицу, у него останется 5 единиц. После зарядки у второго дома останется 4 единицы энергии, у третьего — 3, у четвёртого — 2 и доставщику хватит энергии, чтобы добраться до пятого дома. Можно показать, что меньшего количества энергии роботу не хватит.

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

2. Места в автобусе

1 секунда, математика, разбор случаев

Нумерация мест в автобусе устроена так, как показано на рисунке.

Схема автобуса с номерами мест
Схема автобуса с номерами мест

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

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

1. Идеально удобно — друзья сидят рядом, с одной стороны от прохода. Например, места 1 и 2 или 7 и 8.

2. Довольно удобно — друзья сидят в одном ряду, по разные стороны от прохода, оба места находятся у прохода. Например, места 2 и 4.

3. Можно играть — друзья сидят в соседних рядах, с одной и той же стороны от прохода. Например, места 1 и 5 или 4 и 7.

4. Невозможно играть — во всех остальных случаях.

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

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

В первой строке входных данных записано целое число — номер места первого друга.

Во второй строке записано целое число — номер места второго друга.

Числа и различны и удовлетворяют условиям , .

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

Программа должна вывести одно целое число от 1 до 4 — категорию удобства расположения мест.

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

3. Три Кирилла и их рост

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

Три Кирилла участвовали в турнире по волейболу. Чтобы различать всех Кириллов, им дали номера «первый», «второй» и «третий».

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

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

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

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

Программа получает на вход одно целое число () — сумму ростов Кириллов.

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

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

Обратите внимание на то, что значение ответа в этой задаче может превышать максимальное возможное значение 32-битной целочисленной переменной, поэтому необходимо использовать 64-битные целочисленные типы данных (тип int64 в языке Pascal, тип long long в C++, тип long в Java и C#).

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

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

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

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

Замечание

Во втором примере из условия подходят следующие варианты роста: .

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

4. Очередь на заправку

1 секунда, моделирование

На заправке есть две колонки: одна предназначена для машин с горловиной бензобака справа, другая — для машин с горловиной слева. Каждая машина может заправиться только на подходящей для неё колонке.

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

Сколько времени потребуется, чтобы заправить все машины? Изначально обе колонки свободны. Временем, необходимым для передвижения машин, следует пренебречь.

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

Первая строка входных данных содержит одно целое число () — количество машин.

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

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

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

Обратите внимание на то, что значение ответа в этой задаче может превышать максимальное возможное значение 32-битной целочисленной переменной, поэтому необходимо использовать 64-битные целочисленные типы данных (тип int64 в языке Pascal, тип long long в C++, тип long в Java и C#).

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

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

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

Замечание

Пояснение к примеру из условия.

  • Первая машина заезжает сразу и заправляется 1 минуту;
  • вторая машина ждёт 1 минуту, чтобы освободилась её колонка, затем заезжает и заправляется 2 минуты;
  • третья машина заезжает сразу после второй и заправляется 3 минуты.

Поскольку вторая и третья машины начинают заправку одновременно, последняя машина заканчивает заправку через минуты после начала заправки первой.

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

5. Мост из отрезков

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

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

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

Первая строка входных данных содержит целое число — количество фрагментов моста, . В следующих двух строках содержатся целые числа и — координаты конца моста. Числа и — целые, по модулю не превосходят , при этом точка не совпадает с началом координат.

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

Если такой мост построить нельзя, программа должна вывести число .

Если такой мост построить можно, программа должна вывести строку, в каждой строке должно быть два целых числа — координаты вершин ломаной в порядке обхода. Первая вершина должна иметь координаты , последняя — . Две соседние вершины ломаной должны находиться на расстоянии 1. Ломаная не должна иметь самопересечений. Можно вывести любой подходящий мост.

Замечание

Мост из первого примера изображён на рисунке.

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

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

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

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

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

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

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

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