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

К задаче 1

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

Сириус, первая группа регионов, 21 октября 2025Условия PDFРазбор PDFАрхив с тестамиСдать на Codeforces

Задачи тура

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

1. Рекламные паузы

0.5 секунд, математика, целочисленное деление

Слон Семён включил в онлайн-кинотеатре новый фильм «Матрица». После каждых минут показа фильма вставляется реклама длиной минут. Но если в момент планируемого начала рекламного блока фильм завершается, то рекламу не показывают.

Фильм без рекламы длится минут. Сколько времени займёт показ всего фильма вместе с рекламой?

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

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

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

Третья строка содержит одно целое число () — длительность оригинала фильма без рекламы.

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

Выведите одно целое число — длительность фильма с рекламой.

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

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

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

Замечание

В первом примере будут показаны 4 рекламных блока через 20, 40, 60, 80 минут показа фильма.

Во втором примере будут показаны 3 рекламных блока через 30, 60, 90 минут показа фильма.

стандартный вводстандартный вывод
20
5
90
110
стандартный вводстандартный вывод
30
4
120
132
Официальный разборСначала попробуйте решить сами
Наше решение на C++Полный код на C++17

2. Популярный пост

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

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

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

В первой строке входных данных записано число , во второй , в третьей — из условия задачи ().

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

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

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

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

Замечание

В примере из условия два пользователя могли поставить реакции первого и третьего типов, третий пользователь поставил реакцию второго и третьего типов, а четвёртый пользователь — только реакцию третьего типа.

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

3. Встреча у фонтана

0.5 секунд, теория чисел, НОД

Маша и Паша живут на одной улице, и их дома разделены только парком, в котором друзья любят гулять. В центре парка есть красивый фонтан, у которого Маша и Паша хотят сегодня встретиться. Известно, что Маша идёт до фонтана минут, Паша — минут.

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

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

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

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

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

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

Выведите одно целое число — время, через которое Маша и Паша смогут встретиться у фонтана, если выйдут из домов одновременно, или −1, если этого никогда не случится.

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

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

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

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

Замечание

Далее все временные отметки даются относительно начала движения, т.е. выхода из дома.

В первом примере из условия Маша придёт к фонтану через 3 минуты, развернётся и пойдёт назад. Паша придёт к фонтану через 5 минут и отправится домой. Через 6 минут Маша доберётся до дома, вновь окажется у фонтана через 9 минут, опять не найдёт Пашу, развернётся и пойдёт домой. В следующий раз она будет у фонтана через 15 минут. Паша же дойдёт до дома через 10 минут и вернётся к фонтану через 15 минут, где он и встретится с Машей.

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

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

4. Раскраска стены

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

Длина кирпича в два раза больше его высоты, то есть его можно представить, как прямоугольник размером клетки. Стена сложена из рядов кирпичей, каждый ряд состоит из клеток. В любом ряду последовательность кирпичей сдвинута на 1 клетку по сравнению с вышележащим и нижележащим. То есть в каждом ряду может быть не более целых кирпичей, а в концах каждого ряда могут находиться половинки кирпичей. При этом в самом нижнем ряду слева лежит целый кирпич. На картинке приведён пример стены для и .

Пример стены из кирпичей
Пример стены из кирпичей

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

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

В первой строке входных данных записано число () — количество рядов кирпичей в стене. Во второй строке записано число () — длина каждого ряда кирпичей в клетках.

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

Программа должна вывести строк, каждая из которых содержит ровно цифр от 1 до 9 — цвета, в которые покрашены клетки стены. Если две соседние клетки относятся к одному и тому же кирпичу, то они записываются одинаковыми цифрами, в противном случае — различными. Размещение кирпичей в вашей раскраске должно соответствовать условию задачи (на левом конце нижней строки находится целый кирпич). Используйте минимально возможное количество цветов (разрешены любые цифры от 1 до 9, но количество различных использованных цифр должно быть наименьшим возможным для данного размера стены).

Не допускаются пробелы и другие символы между цифрами, пробелы в началах и на концах строк, пустые строки в выводе программы.

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

5. Проблемы логистики

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

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

Число участников заключительного этапа ВсОШ 3025 сильно увеличилось по сравнению с предыдущими годами, поэтому компьютеров необходимо много. Все они уже разложены по контейнерам, -й из которых весит килограммов. Задачу доставки этих контейнеров поручили транспортной компании, у которой (по счастливой случайности) есть ровно машин, причём стоимость провоза одного килограмма груза на -й из машин равна рублей. Таким образом, стоимость перевоза контейнера номер на машине номер равна рублей. В одной машине можно перевозить только один контейнер!

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

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

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

В следующей строке находятся чисел () — массы контейнеров.

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

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

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

Выведите одно число — максимально возможную суммарную стоимость перевозки всех контейнеров. Если подходящего способа распределить контейнеры по машинам не существует, выведите число «−1» (без кавычек).

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

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

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

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

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

Замечание

В первом примере из условия максимальная стоимость перевозки будет равна .

Во втором примере из условия ограничение по стоимости перевозки одного контейнера равно 350. Поэтому контейнер массой 300 кг можно перевести только по цене 1 рубль за килограмм, а цена 3 рубля за килограмм допустима только для контейнера массой 100 кг. Тогда для контейнера массой 200 кг останется только машина со стоимостью перевозки 2 рубля за килограмм, и соблюсти условие ограничения стоимости перевозки каждого контейнера не получится.

стандартный вводстандартный вывод
5 100
10 2 3 8 4
20 7 50 5 25
370
стандартный вводстандартный вывод
3 350
200 100 300
3 1 2
-1
Официальный разборСначала попробуйте решить сами
Наше решение на C++Полный код на C++17

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

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

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

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

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

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

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